当要连接的数据可以分配在不同的机器上时,Kafka Streams 如何执行连接?
How can Kafka Streams perform a join when the data to join could be allocated on different machines?
有两个 Kafka 主题,每个主题有两个分区。他们的消息由相同的参数 id 键入:Integer.
我有两个 Kafka Streams 应用程序实例,因此每个实例都会分配两个分区(任务),每个主题一个。
现在,假设将来自主题 A 的消息 ID = 1 的分区分配给 KStreams 应用程序实例 A,并将来自主题 B 的消息 ID = 1 的分区分配给应用程序实例 B,如何加入如果来自主题的数据可能未并置(如本例中 keys/ids=1 的情况),那么这两个 KStreams 会起作用吗?
有很多方法可以做到...如果存储不是问题或频率不是问题,如果消息很少,那么您可以将 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
有两个 Kafka 主题,每个主题有两个分区。他们的消息由相同的参数 id 键入:Integer.
我有两个 Kafka Streams 应用程序实例,因此每个实例都会分配两个分区(任务),每个主题一个。
现在,假设将来自主题 A 的消息 ID = 1 的分区分配给 KStreams 应用程序实例 A,并将来自主题 B 的消息 ID = 1 的分区分配给应用程序实例 B,如何加入如果来自主题的数据可能未并置(如本例中 keys/ids=1 的情况),那么这两个 KStreams 会起作用吗?
有很多方法可以做到...如果存储不是问题或频率不是问题,如果消息很少,那么您可以将 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