高级java面试题:kafka如何保证消费顺序

怎么保证kafka消费顺序?
1、一个topic,只设置一个partition。众所周知,一个topic可设置多个partition,partition分布在多个server,每个partition有一个leader,多个follower。以此实现写入高并发。消息可能被写入任一个partition,所以不能保证多个partition之间消息的存入顺序;更不能保证消息的消费顺序。
那么kakfa怎么保证一个partition的顺序?
producer发送消息到kafka,kafka给每个生产者一个生产者PID,kafka单个partition保存的消息顺序即<<PID,TOPIC>,sequnceId>
同一时间先后发送两条消息,第一条message1发送失败,第二条message2发送成功,第一条会重试并成功,如果这时partition保存,会造成消息顺序混乱。
实际partition不会,message1=squenceId1,如果message1发送失败,第二条消息message2=squenceId2过来,判断当前sequence序号差大于1,会丢弃这条消息
如果squence2保存了,sequence1又重发了一条,判断当前sequence大于sequence1,说明是重试的消息,也会丢弃。

2、发送消息可指定(topic, partition, key) 3个参数,即保证同一类消息只发送到同一个partition,保证写入顺序,同时也保证了消费顺序。

高级java面试题:kafka如何保证消费顺序

上一篇:Java--正则表达式--语法介绍


下一篇:java设计模式之观察者