当要加入的数据可以分配在不同的计算机上时,Kafka Streams如何执行加入?

时间:2018-08-19 10:33:44

标签: apache-kafka apache-kafka-streams

具有两个分别带有两个分区的Kafka主题。他们的消息由相同的参数ID(整数)键入。

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

现在,假设将主题A的消息ID = 1的分区分配给KStreams应用程序实例A,并将主题B的消息ID = 1的分区分配给应用程序实例B,这两个对象如何联接如果可能无法并置主题中的数据,那么KStreams是否可以正常工作(在本示例中,对于key / ids = 1会发生这种情况)?

1 个答案:

答案 0 :(得分:1)

有多种方法可以...如果存储不是问题,或者如果消息不足则没有频率,则可以使用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

相关问题