首页 >

kafka中消息数据如何保证按顺序消费? – 网络|

PSd怎么保存到手机PS,心动网络安全视频怎么看,与安全沙箱冲突怎么解决kafka中消息数据如何保证按顺序消费? - 网络|kafka中消息数据如何保证按顺序消费

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

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

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

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

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

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

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

以上只针对单producerpartition的有序保证。0.11版本后,kafka引入事务机制可保证producer挂掉重启后依然保证有序


kafka中消息数据如何保证按顺序消费? - 网络|
  • css如何使文字居中对齐 |css 左右滑动
  • css如何使文字居中对齐 |css 左右滑动 | css如何使文字居中对齐 |css 左右滑动 ...

    kafka中消息数据如何保证按顺序消费? - 网络|
  • 推荐几个法律专业本科生学习法律的网站和手机app? - 网络|
  • 推荐几个法律专业本科生学习法律的网站和手机app? - 网络| | 推荐几个法律专业本科生学习法律的网站和手机app? - 网络| ...

    kafka中消息数据如何保证按顺序消费? - 网络|
  • 求教Excel大神,怎么建立一个类似数据库的东西? - 网络|
  • 求教Excel大神,怎么建立一个类似数据库的东西? - 网络| | 求教Excel大神,怎么建立一个类似数据库的东西? - 网络| ...