4

这个问题是Kafka Streams 在 HDFS 上查找数据的后续问题。我需要将小字典数据加入(如“地图端”加入)到主要的 Kafka 流

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

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

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

  • 将相同的数据(整个数据集)插入主题的每个分区并在KStream#transform. 当主题被过度分区时,我们会有很多重复的数据,但对于一个小数据集,这应该不是问题。

  • 使用 DSL API 对两个流进行重新分区,以便能够执行查找(连接)。就性能而言,这意味着什么?

4

1 回答 1

5

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

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

如果需要检查多个查找数据,那么来回重新分区几次的成本是多少?不可能将整个查找数据集发送到每个分区,因此当我从查找主题构建 KTable 时,我将在所有 Kafka Stream 应用程序实例中看到整个数据集。

这样的功能——我们经常将其描述为“全局 KTable”或“全局状态”——确实很有用,我们已经在讨论何时/如何添加它。

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

使用 DSL API 对两个流进行重新分区,以便能够执行查找(连接)。就性能而言,这意味着什么?

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

于 2016-09-23T08:47:13.193 回答