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

相关推荐

  • 怎么刷新dns缓存

    DNS它是“域名系统”(Domain Name System)的简称,我们上网时输入的域名之所以能找到对应的网站服务器,靠的就是DNS的解析。DNS其实可以理解为是一个分布式的数据…

    2023-01-17
  • 苹果手机7plus怎么样查生产厂家

    中兴伊朗事件,缴纳10亿美元罚款,准备4亿美元保证金交由第三方保管,30天内更换董事会及高层,10年内美商务部指定的人员对中兴及其子公司有协调、监督、评估和报告的权力,一系列苛刻的…

    手机教程 2023-06-22
  • iphone x值得买吗(iphone 13测评)

    作为手机店的店长,我可以明确的告诉你:iPhoneX的实际体验不输华为mate30,即使是2022年阶段,iPhoneX的综合实力也超过了部分安卓旗舰机。 所以iPhoneX值得购…

    2023-03-20
  • 怎样知道微信的号是不是被拉黑

    你知道世界上有什么东西不能直视吗?我告诉你,一是太阳,二是人心!最好不要用测试的方法去确定你是不是被拉黑了,如果就是拉黑了,原因只有一个,你们的缘分走到尽头了,人家都已经把你拉黑了…

    手机教程 2023-01-01
  • 手机摄影照片怎么拍好看,手拍世界手机摄影平台

    一般来说你会用相机拍照你就会用手机拍照,也就是说你能用相机拍好照片,不管这个相机是专业单反还是微单还是无反还是什么相机,更不论是佳能还是尼康还是富士还是索尼还是莱卡啥的牌子相机,你…

    2023-05-04
  • 微信小程序用什么做出来的(微信开店免费的小程序店铺)

    你好,我来谈下我的看法。 微信小程序是微信开发的免费的应用程序,不需要我们下载App,是个很不错的应用。我们制作分两步走,身份注册和开发。 身份注册 我们在网页搜索微信公众号平台,…

    2023-03-24
  • 怎么让两台手机同时播放音乐

    哈,题主真的是很有趣又很无聊。说它有趣是因为我以前跟朋友在一起玩儿无聊的时候经常这样干,两台手机同时播放音乐后分别凑在左右耳朵边上,能带来一种前所未有的“升天的感觉”(夸张)。 方…

    2023-01-01
  • type-c数据线和普通数据线区别

    双Type-C数据线两头都是Type-C接口 一般的Type-C数据线一头是Type-A公头,一头是Type-C公头。双Type-C数据线两头都是Type-C公头。 什么是Type…

    2023-04-18
  • 手机进水了怎么办(手机进水了怎么办小妙招简单)

    手机是大家经常用的工具了,在日常的使用中,手机难免会磕磕碰碰,这个是很正常的事情,一般都不会对手机造成损伤,但手机毕竟是电子产品,非常怕水,有很多小伙伴的手机掉进水里之后,因为处理…

    2022-12-28
  • 怎么保护相机,手机相机怎么保护

    保护相机一直都是非常重要的问题,毕竟相机再怎么降价,都是一件贵重物品。 我个人觉得相机的保护应该是三个主要的方面:防震,防尘,防潮。 这三个方面都非常重要。 防震主要还是在相机外出…

    2023-07-03