首页 文章

Kafka Streams“map-side”加入就像字典查找一样

提问于
浏览
3

这个问题是Kafka Streams with lookup data on HDFS的后续行动 . 我需要加入(如"map-side" join)小字典数据到主Kafka流

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

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

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

  • 将相同的数据(整个数据集)插入主题的每个分区,并在 KStream#transform 中执行查找 . 当主题过度分区时,我们就会出现问题 .

  • 使用DSL API对两个流进行重新分区,以便能够执行查找(连接) . 在性能方面有什么影响?

1 回答

  • 4

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

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

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

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

    Update Feb 28, 2017: 围绕全局表的第一轮功能与Kafka 0.10.2一起发布,您可以在其中执行KStream-to-GlobalKTable连接 .

    使用DSL API对两个流进行重新分区,以便能够执行查找(连接) . 在性能方面有什么影响?

    其影响主要取决于输入数据的特征(数据量,统一与偏斜数据分布等) .

相关问题