这个问题是Kafka Streams with lookup data on HDFS的后续问题。 我需要加入(如“地图侧”连接)小字典数据到主Kafka流
AFAIK,Kafka Stream实例始终适用于主题的给定分区。如果我想做查找, 我需要为连接键重新分配两个流,以将相关记录放在一起。
如果需要检查多个查找数据,多次来回重新分配的成本是多少?
无法将整个查找数据集发送到每个分区,因此当我从查找中构建KTable
时
主题,我将在所有Kafka Stream应用程序实例中看到整个数据集。
因此,我可以在KStream#transform()
方法中进行查找,这将使本地RocksDB存储与所有
我有查询数据。
我想知道哪个选项更合适:
将相同数据(整个数据集)插入主题的每个分区,并在KStream#transform
中执行查找。
当主题过分时,我们会有很多重复数据,但对于一个小数据集,这应该不是问题。
使用DSL API对两个流进行重新分区,以便能够执行查找(连接)。 这方面的表现有什么影响?
答案 0 :(得分: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对两个流进行重新分区,以便能够执行查找(连接)。在性能方面有什么影响?
其影响主要取决于输入数据的特征(数据量,统一与偏斜的数据分布等)。