首页 > 解决方案 > Kafka 流可以有效地处理加入流吗?

问题描述

我是 Kafka 的新手,我想知道我的计划是否可行且合理。

假设我们有两个源,它们分别向主题 和s1发出s2一些消息。现在,我想要一个接收两个主题的接收器,并且我希望它处理消息的元组。t1t2<m1, m2>m1.key == m2.key

如果m1.key从未在 的某些消息中找到s2,则接收器完全忽略m1.key(永远不会处理它)。

总而言之,接收器将仅对已使用的键s1起作用s2

一些传统的并且可能是幼稚的解决方案是拥有某种缓存或存储,并且仅当两条消息都在缓存中时才对项目进行处理。

我想知道卡夫卡是否提供了解决这个问题的方法。

标签: apache-kafkadistributed-systemstream-processing

解决方案


大多数现代流处理引擎,例如Apache FlinkKafka StreamsSpark Streaming都可以为您解决这个问题。这三个人都为这样的用例构建了经过实战考验的 Kafka 消费者。

即使在这些框架中,也有多种不同的方法可以实现上述流式连接。例如,在 Flink 中,可以使用具有类似 SQL 语法的Table API 。

我过去使用的看起来有点像这个 SO 答案中的例子 (你可以fromElements用 Kafka Source 替换)。

使用流时要记住的一件事是,在使用来自两个 Kafka 主题t1t2. 您的代码需要考虑以任何顺序到达的消息。

编辑 - 刚刚意识到您的问题可能是关于如何使用 Kafka 流而不是来自 Kafka 的数据流来实现连接。在这种情况下,您可能会在此处找到相关信息


推荐阅读