首页 > 解决方案 > 当要连接的数据可以分配在不同的机器上时,Kafka Streams 如何执行连接?

问题描述

有两个 Kafka 主题,每个主题有两个分区。他们的消息由相同的参数 id 键入:整数。

我有两个 Kafka Streams 应用程序实例,因此每个主题都会被分配两个分区(任务)。

现在,假设来自主题 A 的消息 ids =1 的分区被分配给 KStreams 应用程序实例 A,而来自主题 B 的消息 ids =1 的分区被分配给应用程序实例 B,这两个 KStreams 的连接如何工作如果来自主题的数据可能没有被并置(就像在这个例子中发生的键/ids = 1)?

标签: apache-kafkaapache-kafka-streams

解决方案


有一些方法可以做到这一点......如果存储不是问题或消息较少的频率,那么您可以将 GlobalKtables 用于主题之一。这将花费更多内存,因为所有分区都将在 Streams 应用程序的所有实例上同步。

https://docs.confluent.io/current/streams/concepts.html#globalktable

另一种方法是使用 Kafka 流交互查询来发现其他流实例上的数据。

https://kafka.apache.org/10/documentation/streams/developer-guide/interactive-queries.html

对于 KStreams 连接 - 您需要为两个主题设置相同数量的分区以及相同的分区策略。这样,所有消费者将以相同的方式读取两个主题的分区。

很好的分区参考博客 - https://medium.com/@anyili0928/what-i-have-learned-from-kafka-partition-assignment-strategy-799fdf15d3ab


推荐阅读