kafka 如何保证消息消费顺序性

关于Kafka保证单partition有序的讨论如下:

一、为什么只保证单partition有序

如果Kafka要保证多个partition有序,不仅broker保存的数据要保持顺序,消费时也要按序消费。假设partition1堵了,为了有序,那partition2以及后续的分区也不能被消费,这种情况下,Kafka 就退化成了单一队列,毫无并发性可言,极大降低系统性能。因此Kafka使用多partition的概念,并且只保证单partition有序。这样不同partiiton之间不会干扰对方。

二、Kafka如何保证单partition有序?

  1. producer发消息到队列时,通过加锁保证有序。
    kafka 如何保证消息消费顺序性图1现在假设两个问题broker leader在给producer发送ack时,因网络原因超时,那么Producer 将重试,造成消息重复。先后两条消息发送。t1时刻msg1发送失败,msg2发送成功,t2时刻msg1重试后发送成功。造成乱序。

2.解决重试机制引起的消息乱序

为实现Producer的幂等性,Kafka引入了Producer ID(即PID)和Sequence Number。对于每个PID,该Producer发送消息的每个<Topic, Partition>都对应一个单调递增的Sequence Number。同样,Broker端也会为每个<PID, Topic, Partition>维护一个序号,并且每Commit一条消息时将其对应序号递增。对于接收的每条消息,如果其序号比Broker维护的序号)大一,则Broker会接受它,否则将其丢弃:

  • 如果消息序号比Broker维护的序号差值比一大,说明中间有数据尚未写入,即乱序,此时Broker拒绝该消息,Producer抛出InvalidSequenceNumber
  • 如果消息序号小于等于Broker维护的序号,说明该消息已被保存,即为重复消息,Broker直接丢弃该消息,Producer抛出DuplicateSequenceNumber
  • Sender发送失败后会重试,这样可以保证每个消息都被发送到broker

关于顺序消费的几点说明:

①、kafka的顺序消息仅仅是通过partitionKey,将某类消息写入同一个partition,一个partition只能对应一个消费线程,以保证数据有序。

②、除了发送消息需要指定partitionKey外,producer和consumer实例化无区别。

③、kafka broker宕机,kafka会有自选择,所以宕机不会减少partition数量,也就不会影响partitionKey的sharding。

那么如何保证数据的消费?

1、如顺序消费中的第①点说明,生产者在写的时候,可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。

2、消费者从 partition 中取出来数据的时候,也一定是有顺序的。到这里,顺序还是 ok 的,没有错乱。

3、但是消费者里可能会有多个线程来并发来处理消息。因为如果消费者是单线程消费数据,那么这个吞吐量太低了。而多个线程并发的话,顺序可能就乱掉了。

kafka 如何保证消息消费顺序性图2

解决方案:

写N个queue,将具有相同key的数据都存储在同一个queue,然后对于N个线程,每个线程分别消费一个queue即可。

kafka 如何保证消息消费顺序性图3

注:在单线程中,一个 topic,一个 partition,一个 consumer,内部单线程消费,这样的状态数据消费是有序的。但由于单线程吞吐量太低,在数据庞大的实际场景很少采用。

加米谷大数据培训,大数据开发0基础班、提高班,成都小班面授!

相关:突发宕机,Kafka写入的数据如何保证不丢失?

***/i6667797088824197644/

本文来自投稿,不代表天一生活立场,如若转载,请注明出处:http://tiyigo.com/phone/26233.html

(0)
上一篇 2023-05-01 09:44
下一篇 2023-05-01 10:17

相关推荐

  • 用过中兴手机有什么感想

    中兴手机实际上是最可惜的,可以说是起了个大早,干了个晚集。现在的中兴手机不论是在中国还是全球,都和主流相差很远了,这个有中兴手机自身的原因,不过我觉得中兴手机有几个毛病的确是要解决…

    2023-02-28
  • 微信红包与转账有什么区别

    微信红包和微信转账有什么区别?相信很多人都有这种疑问,都是用来给别人发钱的,能有什么区别呢?如果不是一个细心的人,还真的不太清楚它们之间的区别。只要我们仔细分析一下,微信红包和微信…

    2023-03-29
  • 怎么才能找回手机相册里误删的照片呢

    最简单快速恢复手机照片的方法,就是直接借助相关手机数据恢复软件来实现。首先,我们需要打开手机“USB调试”开关。可以按图示方法打开安卓手机“USB调试”开关。 2接下来将手机连接电…

    2023-01-25
  • 相机摇拍怎么拍(摇摄照片怎么拍)

    相机摇拍怎么用? 摇拍也是慢门分支下的一种创意拍摄手法,所谓摇拍,就是通过较慢的快门速度,让镜头保持匀速运动,根据不同的运动路径,摇拍可以表现出许多创意的视觉效果。 拍摄方法:快门…

    2023-02-04
  • 想做好一个淘宝店,我有员工15人,现业务是电话营销如何开淘宝店,请大神指点下如何开店拉流量

    如果电话营销不好做了,真打算开淘宝店,建议把15个人都解散了,因为这些人都用不到,可以轻装上阵。下面说下开好淘宝店的几个步骤: 分析市场,先决定要卖什么 搞懂淘宝的底层逻辑 把店开…

    手机教程 2023-06-09
  • 手机信号栏上的e是什么意思

    首先,手机信号栏上显示的标识根据运营商的不同显示的内容也不同,要准确识别标识首先你得明白自己的运营商(移动、联通、电信)是谁,然后我们按照速率来进行区分——如果是移动的卡,你可以看…

    2023-04-18
  • 微信怎么从转账记录加回好友(微信存量怎么提高)

    微信 怎么从零做起到现在称霸互联网上的APP,微信走向成功的辉煌背后,离不开团队的协作,决策者的智慧,开发者的长远目光。那微信真正是怎么做起来呢? 我们都知道微信是深圳腾讯公司旗下…

    2023-03-20
  • 华为mate10怎么人脸识别

    首先必须知道一点,目前市面上所有的面部识别除了苹果的Face ID都是二维识别,也就是说除了苹果之外的其他面部识别都可以用照片骗过。 华为虽然公布了自己的3D面部识别方案但是只是技…

    2023-01-14
  • 苹果ipad无法保存到相册

    很高兴解答。用苹果系统在网页上或者在App上看见好玩的小视频或者电视剧无法保存到本地是件非常痛苦的事情,接下来我就教大家如何将它们保存到本地相册。 首先要在苹果官方的应用商店[AP…

    2023-03-09
  • 手机电池怎么更耐用

    针对网友提出的手机电池越来越不耐用的问题。我认为:大家应关注两个问题,首先看手机打开的程序是不是过多,另外,要正确对手机充电!例如:关闭传感器类功能;打开屏幕自动亮度调节;无线网络…

    手机教程 2023-01-04