我想知道如何将Kafka流分配给主题分区以供阅读。据我了解,每个Kafka Stream线程都是一个Consumer(Stream有一个Consumer Group)。因此,我想将消费者随机分配给分区。
但是,如果我有多个要加入的输入主题,怎么办?
示例:
主题P包含人员。它有两个分区。消息的密钥是人员ID,因此,属于一个人的每条消息总是以相同的分区结尾。
主题O包含订单。它有两个分区。可以说,密钥也是(订购商品的人的)个人ID。因此,在这里,属于一个人的每个订单消息也总是以相同的分区结尾。
现在我有了一个流,它从两个主题中读取并计算每个人的所有订单并将其写入另一个主题(消息中还包括该人的姓名)。
[
分区1
:"hans, id=1"
,"maria, id=3"
分区2
:"john, id=2"
[中的数据:分区1:"person-id=2, pizza"
,"person-id=3, cola"
分区2:"person-id=1, lasagne"
现在我开始两个流。
然后可能会发生:流1
被分配给主题P分区1
和主题O分区1。流2被分配给主题P分区2
和主题O分区2。这意味着顺序lasagne
的hans
永远不会被计数,因为为此,流将需要消耗topic P分区1
和topic O分区2。那么,如何处理该问题?我猜这很普遍,流需要以某种方式处理彼此相关的数据。因此,必须确保相关数据(此处为hans
和lasagne
)由同一流处理。 我知道,如果只有一个流或主题只有一个分区,则不会发生此问题。但我希望能够同时处理消息。谢谢