[在收听具有多个分区的主题时,如何确保Kafka Streams,所有相关数据都已处理?

问题描述 投票:1回答:1

我想知道如何将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这意味着顺序 lasagnehans

永远不会被计数,因为为此,流将需要消耗topic P分区1

topic O分区2
那么,如何处理该问题?我猜这很普遍,流需要以某种方式处理彼此相关的数据。因此,必须确保相关数据(此处为hanslasagne)由同一流处理。 我知道,如果只有一个流或主题只有一个分区,则不会发生此问题。但我希望能够同时处理消息。

谢谢

apache-kafka stream apache-kafka-streams
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.