kafka消息按照某个key来发到特定的partition,可以保持相同key的顺序。那在partition数或者consumer数发生改变的时候,会发生消息乱序吗?
每个partition的消息都是按顺序的,同一时刻只有1个分区对应1个消费者,所以单个分区是不会乱序。
partition数改变的话,同一个key可能发到另一个partition吧,这样这个key的消息就可能发生乱序?consumer数改变的话,假如某个partition的consumer发生变化,kafka能保证:在旧consumer把拿到的消息都全部commit之后,新consumer才开始消费么?
1、key可能发送到另外一个partition,这个你的规则一开始就要确定的,即使有新增的partition,也不应把消息发到新的分区上。2、kafka当然无法保证旧的consumer把拿到的消息全部commit了,因为consumer重新选举触发了,说明旧的consumer已经失联了。
你的问题一开始就说明了在特定的分区上,我理解的是你已经做了分区指定规则,而不是因为有了新的就发到新的。有了新的分区,也必须是通过自己的规则,将特定的一类消息放到该分区上,才行。
kafka的乱序是consumer造成的,parition先进先出顺序保证,但是消费者的能力不一,有的处理的快,有的处理的慢,必定会乱,所以kafka推荐如果需要强一致,就只能有1个分区。而你通过规则设置不同的key,消费分到“特定的分区”,和kafka的1个分区效果是一样的。
那就是说,即使只有1个partition,但如果发生rebalance的话,在新旧两个consumer之间,仍然可能出现消息乱序咯?
你要控制consumer如何提交offset了,如果你业务很多问题,消费者写的不好,你还要面临重复消费或漏消息的问题。
找不到想要的答案?提一个您自己的问题。
0 声望
这家伙太懒,什么都没留下
每个partition的消息都是按顺序的,同一时刻只有1个分区对应1个消费者,所以单个分区是不会乱序。
partition数改变的话,同一个key可能发到另一个partition吧,这样这个key的消息就可能发生乱序?
consumer数改变的话,假如某个partition的consumer发生变化,kafka能保证:在旧consumer把拿到的消息都全部commit之后,新consumer才开始消费么?
1、key可能发送到另外一个partition,这个你的规则一开始就要确定的,即使有新增的partition,也不应把消息发到新的分区上。
2、kafka当然无法保证旧的consumer把拿到的消息全部commit了,因为consumer重新选举触发了,说明旧的consumer已经失联了。
你的问题一开始就说明了在特定的分区上,我理解的是你已经做了分区指定规则,而不是因为有了新的就发到新的。
有了新的分区,也必须是通过自己的规则,将特定的一类消息放到该分区上,才行。
kafka的乱序是consumer造成的,parition先进先出顺序保证,但是消费者的能力不一,有的处理的快,有的处理的慢,必定会乱,所以kafka推荐如果需要强一致,就只能有1个分区。而你通过规则设置不同的key,消费分到“特定的分区”,和kafka的1个分区效果是一样的。
那就是说,即使只有1个partition,但如果发生rebalance的话,在新旧两个consumer之间,仍然可能出现消息乱序咯?
你要控制consumer如何提交offset了,如果你业务很多问题,消费者写的不好,你还要面临重复消费或漏消息的问题。
你的答案