卡夫卡划分消费顺序

时间:2019-08-13 12:15:31

标签: apache-kafka kafka-consumer-api

让我们假设我有一个消费者,并且有一个带有2个分区A和B的主题

如果使用者同时连接到这两个分区,消息将以什么顺序使用?

例如

Partition A

-------------
| A | B | C |
-------------

Partition B

-------------
| X | Y | Z |
-------------

是否会随机使用邮件,例如

A -> X -> Y -> B

或者是否有任何适用的机制(循环)

A -> X -> B -> Y -> C -> Z

1 个答案:

答案 0 :(得分:2)

Kafka仅在单个分区内保证消息顺序。

处理此问题的最简单方法(尽管不是最有效的方法)是创建单个分区并运行单个使用者。

或者,您可以根据邮件的密钥对邮件进行分区。具有相同密钥的消息将插入到同一分区,因此可以保证具有相同密钥的消息的顺序。例如,假设您的数据流包含用户的详细信息。您可以使用例如将userID作为键,以便将具有特定userID的用户的所有消息插入同一分区。然后,使用者将以key=userID的形式使用已插入主题的用户消息(或更确切地说是分区)。