Kafka 流可以有效地处理加入流吗?
Can Kafka streams deal with joining streams efficiently?
我是 Kafka 的新手,我想知道我计划的实施是否可行且合理。
假设我们有两个源,s1
和 s2
,它们分别向主题 t1
和 t2
发出一些消息。现在,我想要一个收听两个主题的接收器,我希望它能够处理 <m1, m2>
的消息元组,其中 m1.key == m2.key
.
如果 m1.key
从未在 s2
的某些消息中找到,则接收器完全忽略 m1.key
(永远不会处理它)。
总而言之,接收器仅适用于 s1
和 s2
使用的键。
一些传统且可能幼稚的解决方案是拥有某种缓存或存储,并且仅当两条消息都在缓存中时才处理一个项目。
我想知道 Kafka 是否提供了解决这个问题的方法。
大多数现代流处理引擎,例如Apache Flink, Kafka Streams or Spark Streaming都可以为您解决这个问题。这三者都经过了针对此类用例构建的 Kafka 消费者的实战测试。
即使在这些框架内,也有多种不同的方法可以实现上述流连接。
例如,在 Flink 中,可以使用具有类似 SQL 语法的 Table API。
我以前用的有点像中的例子(你可以用Kafka Source替换fromElements
)。
使用流时要记住的一件事是,在使用来自两个 Kafka 主题 t1
和 t2
的数据时,您没有任何顺序保证。您的代码需要考虑以任何顺序到达的消息。
编辑 - 刚刚意识到您的问题可能是关于如何使用 Kafka Streams 而非来自 Kafka 的数据流来实现连接。在这种情况下,您可能会找到相关信息 here
我是 Kafka 的新手,我想知道我计划的实施是否可行且合理。
假设我们有两个源,s1
和 s2
,它们分别向主题 t1
和 t2
发出一些消息。现在,我想要一个收听两个主题的接收器,我希望它能够处理 <m1, m2>
的消息元组,其中 m1.key == m2.key
.
如果 m1.key
从未在 s2
的某些消息中找到,则接收器完全忽略 m1.key
(永远不会处理它)。
总而言之,接收器仅适用于 s1
和 s2
使用的键。
一些传统且可能幼稚的解决方案是拥有某种缓存或存储,并且仅当两条消息都在缓存中时才处理一个项目。
我想知道 Kafka 是否提供了解决这个问题的方法。
大多数现代流处理引擎,例如Apache Flink, Kafka Streams or Spark Streaming都可以为您解决这个问题。这三者都经过了针对此类用例构建的 Kafka 消费者的实战测试。
即使在这些框架内,也有多种不同的方法可以实现上述流连接。 例如,在 Flink 中,可以使用具有类似 SQL 语法的 Table API。
我以前用的有点像fromElements
)。
使用流时要记住的一件事是,在使用来自两个 Kafka 主题 t1
和 t2
的数据时,您没有任何顺序保证。您的代码需要考虑以任何顺序到达的消息。
编辑 - 刚刚意识到您的问题可能是关于如何使用 Kafka Streams 而非来自 Kafka 的数据流来实现连接。在这种情况下,您可能会找到相关信息 here