首页 > 解决方案 > 将 KStream 加入 KTable 时,Kafka KTables 缺少数据

问题描述

有没有人对这个问题发表过回应?还有其他帖子没有答案。我们的情况是,我们正在将消息推送到支持 KTable 的主题上,该主题是流处理的第一步。然后,我们从这些消息中提取少量数据并传递它们。我们正在对少量数据进行多次计算,以进行分组和聚合。在流式处理结束时,我们只想通过 KTable 重新加入到原始主题,以再次获取完整的消息内容。连接的结果只是数据的一个子集,因为它在 KTable 中找不到条目。

这只是问题的开始。在另一种情况下,我们使用 KTables 作为查找的索引,旨在丰富传入的数据。将这些查找视为识别我们之前是否在流消息中看到过特定模式。如果我们看到了模式,我们希望使用从现有 KTable 中提取的 ID(用于分组)对其进行标记。如果我们之前没有看到该模式,我们将为其分配一个 ID 并将其放回 KTable 中以用于标记未来的消息。我们发现,无法保证这些信息将出现在 KTable 中以供将来的消息使用。这种缺乏保证似乎让 KTables 毫无用处。我们无法弄清楚为什么论坛上对此的讨论很少。

最后,当使用流应用程序的单个实例运行时,这些似乎都不是问题。然而,一旦我们的数据变大并且我们被迫拥有 10 个应用程序实例,一切都崩溃了。同样,我们无法使用 GlobalKTables 之类的东西,因为要加载到单个机器的内存中的数据太多。

我们能做什么?我们目前计划完全放弃 KTables,并使用 Hazelcast 之类的东西来存储查找数据。我们是否应该转移到 Hazelcast Jet 并一起放弃 Kafka 流?

添加流: Kafka数据流

标签: joinapache-kafkamissing-dataapache-kafka-streams

解决方案


对于这个没有答案的答案,我很抱歉,但我没有足够的积分来评论......

您描述的行为绝对与我对流的理解和经验不一致。如果您可以共享导致问题的拓扑(或简化的拓扑),那么我们可能会指出一个简单的错误。

一旦我们获得更多信息,我可以将其编辑为“真实”答案......

谢谢!-约翰


推荐阅读