让我们假设我有一个消费者,并且有一个带有2个分区A和B的主题
如果使用者同时连接到这两个分区,消息将以什么顺序使用?
例如
Partition A
-------------
| A | B | C |
-------------
Partition B
-------------
| X | Y | Z |
-------------
是否会随机使用邮件,例如
A -> X -> Y -> B
或者是否有任何适用的机制(循环)
A -> X -> B -> Y -> C -> Z
答案 0 :(得分:2)
Kafka仅在单个分区内保证消息顺序。
处理此问题的最简单方法(尽管不是最有效的方法)是创建单个分区并运行单个使用者。
或者,您可以根据邮件的密钥对邮件进行分区。具有相同密钥的消息将插入到同一分区,因此可以保证具有相同密钥的消息的顺序。例如,假设您的数据流包含用户的详细信息。您可以使用例如将userID
作为键,以便将具有特定userID
的用户的所有消息插入同一分区。然后,使用者将以key=userID
的形式使用已插入主题的用户消息(或更确切地说是分区)。