首页 > 其他分享 >如何保证数据顺序性

如何保证数据顺序性

时间:2023-02-28 16:26:13浏览次数:41  
标签:顺序 里面 队列 partition 如何 消费 消息 保证数据

这个问题从两个方面进行回答:为什么会存在无序消费,如何保证有序消费

1 为什么会存在无序消费?

  0 kafka的一个topic的数据,可以维护多个partition来实现消息的分片,生产者在生产数据的时候,会根据key来进行取模,决定将消息存储到哪一个partition里面。而且消息是按照先后有序的去存储在partition里面的。   0 假设一个topic里面有三个partition,而消息正好被路由到三个独立的partition里面,然后消费端有三个消费者通过balance(负载均衡)的机制分别指派了对应的消费分区。因为消费者是完全独立的网络节点,所以,消费者的消费顺序可能不是按照消息发送的,从而导致消费乱序的问题。

2 如何保证有序消费

  0 针对这个问题,一般的解决方法是,自定义消息路由的一个算法。然后把指定的key都发送到同一个partiyion里面。然后我们指定一个消费者,专门去消费某一个分区的数据,这样就可以顺序消费了。   补充:在有些设计方案中,消费端会采用多线程的方式提高消息的处理效率,这种情况也会出现消息处理无序的问题。针对这个问题,一般是在消费端采用一个阻塞队列,把获取到的消息保存在阻塞队列里面,然后采用一个异步线程从队列里来获取消息。

标签:顺序,里面,队列,partition,如何,消费,消息,保证数据
From: https://www.cnblogs.com/zhangpb/p/17164730.html

相关文章

  • 企业如何落地DevOps(上)
    这是devops系列的第四篇文章。前面几篇文章,分别从devops的定义和价值、落地路线图以及落地三要素进行了分析。这篇文章开始,我会分享devops在企业或团队中具体的落地实践......
  • 如何在CAD中徒手画不规则图形?你用过SKETCH命令吗?
    CAD画图过程中,当需要从扫描图上描绘出一些不规则的图形时,用直线或多段线命令绘制又很麻烦,那么,有什么办法可以快速在CAD中徒手画不规则图形呢?一看你就没有用过SKETCH命令,本......
  • Python中如何读写.bin文件?
    我们知道numpy的array是可以保存到文件的,一个常用的做法是通过to_file()保存到而进行.bin文件中,然后再通过from_file()从.bin文件中将其读取出来,下面看一个例子。data_in......
  • 《话糙理不糙》之如何在学习openfoam时避免坑蒙拐骗
    今天开启一个单独的系列《话糙理不糙》这个系列可听可不听,只渡有缘人要是真有人来杠,我真是非常懒得理-谁要和你说学openfoamC++基础不重要,那就是放氨气,非常误人这......
  • 如何实现延迟任务,这11种方式才算优雅!
    大家好,我是三友~~延迟任务在我们日常生活中比较常见,比如订单支付超时取消订单功能,又比如自动确定收货的功能等等。所以本篇文章就来从实现到原理来盘点延迟任务的11种实......
  • 如何挑选手游SDK?
    手游SDK是手游联运平台的重要组成部分,主要负责游戏平台的注册登录、充值支付和数据管理分析,当游戏平台接入游戏时,需要统一进行账号的创建、支付等,此时游戏SDK就可以将这些共......
  • httpclient如何一起上传内容和图片
    以文件的形式传参/***通过拼接的方式构造请求内容,实现参数传输以及文件传输**@paramactionUrl访问的服务器URL*@paramparams普通参数......
  • 虚拟主机中,如何知道服务器上已安装的所有字体的列表?
    很久以前,我曾写过一篇“网页中如何获取客户端系统已安装的所有字体?”之后,有一些朋友问我:在使用虚拟主机的情况下,如何获取服务器上已安装字体的列表?实际上,非常简单!在支持asp.......
  • IM即时通讯开发如何正确理解HTTP短连接中的Cookie、Session和Token
    众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现。Http短连接主要用于从服务器读取各种持久化信......
  • 如何在IIS中启用HTTPS
    在上篇文章中,介绍了如何安装typecho博客系统,默认是没有启用https访问的,这篇文章介绍如何在IIS中开启https访问。 开启https访问需要两个步骤:1、申请一个ssl证书,我这......