Kafka Streams "map-side" 像字典查找一样加入

Kafka Streams "map-side" join like dictionary lookup

此问题是 的后续问题。 我需要加入(如 "map-side" 加入)小字典数据到主卡夫卡流

AFAIK,Kafka Stream 实例始终在主题的给定分区上工作。如果我想做查找, 我需要为连接键重新划分两个流,以将相关记录放在一起。

如果需要检查多个查找数据,来回重新分区几次的成本是多少? 不可能将整个查找数据集发送到每个分区,所以当我从查找构建 KTable 主题,我将在所有 Kafka Stream 应用程序实例中看到整个数据集。 因此,我可以在 KStream#transform() 方法中进行查找,该方法将获取本地 RocksDB 存储以及所有 我有查询数据。

我想知道哪个选项更合适:

AFAIK, a Kafka Stream instance always works on a given partition of a topic. If I wanted to do lookups, I needed to repartition both streams for the join key, to bring the related records together.

是的,从 Apache Kafka 0.10.0 和 0.10.1 开始,这就是您需要做的。

What is the cost of repartitioning back and forth several times if multiple lookup data need to be checked? Wouldn't be possible to send the whole lookup dataset to each partition, so when I build a KTable from the lookup topic, I'll see the whole data set in all the Kafka Stream application instances.

这样的功能——我们经常将其描述为 "global KTable" 或 "global state"——确实很有用,我们已经在讨论 when/how 我们可以添加它。

2017 年 2 月 28 日更新: Kafka 0.10.2 发布了围绕全局表的第一轮功能,您可以在其中执行 KStream-to -GlobalKTable 加入。

do repartitioning of both streams using the DSL API to be able to perform the lookups (joins). What are the implications here in terms of performance?

影响主要取决于输入数据的特征(数据量、均匀分布与偏斜数据分布等)。