【发布时间】:2021-10-05 16:38:31
【问题描述】:
我有一个用例,我们在同一个应用程序中定义了多个 Kafka 拓扑。我正在运行我的应用程序的多个实例(例如,在 2 个实例上运行的 2 个拓扑)。假设第一个拓扑有 2 个主题 (t0, t1) 有 2 个分区 (p0, p1) 来消费,第二个拓扑有 2 个主题 (t2, t3) 有 2 个分区 (p0, p1) 消费并且所有主题都相同关键值(例如 eventId)。我可以看到第一个和第二个拓扑的两个主题的分区都被分配给了各自的消费者。
与第一个拓扑 t0-p0 一样,t1-p0 分配给 consumer-0,t0-p1,t1-p1 分配给 consumer-1。 与第二个拓扑 t2-p0 一样,t3-p0 分配给 consumer-1,t2-p1,t3-p1 分配给 consumer-0。
现在我要确定的是,它们各自拓扑中的所有主题的分区 0 应该始终分配给消费者 0。但我可以看到,在我的用例中,在第一个拓扑中,t0-p0、t1-p0 被分配给消费者 0,而在第二个拓扑中,t2-p0、t3-p0 被分配给消费者 1。
有什么方法可以将我的应用程序配置为始终将消费者 0 分配给第 0 个分区,而消费者 1 应该为不同拓扑上的所有主题监听分区 1?
【问题讨论】:
-
您使用的是什么消费者方法?订阅还是分配?归根结底,你为什么要关心哪个分区分配给哪个消费者?
-
@OneCricketeer:这对我来说很重要,因为我的两个拓扑都将数据实体化到存储中,当我从任何一个拓扑中查询存储时,我无法得到结果,因为 partition-0其他拓扑与其他实例。
-
那么您将错误地获取商店,因为所有实例都应该能够相互了解。 Refer docs on Interactive Queries 或 GlobalKTables
标签: apache-kafka kafka-consumer-api apache-kafka-streams spring-cloud-stream