来源:https://kafka.apache.org/intro
"通过并行主义的概念 - 主题内的分区, Kafka能够提供订购保证和负载平衡 在一系列消费者流程中。这是通过分配 将主题中的分区分配给使用者组中的使用者 每个分区仅由组中的一个消费者使用。通过 这样做,我们确保消费者是唯一的读者 按顺序分区和使用数据。 "
这仅表示每个消费者将按顺序处理消息,但是在同一个消费者群体中的消费者中,它可能仍然无序。 例如:3个分区。订户通过循环将M1发送到P1,M2发送到P2,M3发送到P3,然后发送M4到P1,M5到P2,以及M6到P3。
现在我们有: P1:M1和M4 P2:M2和M5 P3:M3和M6
如果每个consuemr都绑定到一个分区,那么C1将按顺序处理M1和M4,C2进程M2和M5等。我们如何保证在处理M4之前处理M2(通过C2)(通过C1)?
或者我误解了什么?
答案 0 :(得分:2)
我们如何保证在处理M4(由C1)之前处理M2(通过C2)?
一般情况下你不能。
如果每个consuemr都绑定到一个分区,那么C1将按顺序处理M1和M4,C2进程M2和M5等。
即使您有一个消费者使用该主题的所有分区,分区也会以不确定的顺序使用,并且不能保证所有分区的总排序。
或者我误解了什么?
不,你正确理解。仅在单个分区上保证排序。
作为Vishal John writes:
例如,假设您的邮件是基于user_id进行分区的,并考虑4条包含user_ids 1,2,3和4的邮件。假设您有一个包含4个分区的“用户”主题。
由于分区基于user_id,假设具有user_id 1的消息将转到分区1,具有user_id 2的消息将转到分区2,依此类推..
同时假设您有4个消费者参与该主题。由于您有4个消费者,Kafka会将每个消费者分配到一个分区。因此,在这种情况下,只要推送4条消息,消费者就会立即使用它们。
您可以实现缓冲和重新排序的消费者逻辑,但该逻辑的工作方式取决于您的具体用例。