我是新来的卡夫卡,我想知道如果有什么我计划是可行的和合理实施。
假设我们有两个来源,s1
和s2
分别发出一些消息的主题t1
和t2
。现在,我想有监听到两个主题水槽和我想它来处理消息<m1, m2>
的元组,其中m1.key == m2.key
。
如果m1.key
从未在s2
的一些消息中找到,那么,信宿完全忽略m1.key
(永远不会处理它)。
综上所述,水槽会在该s1
按键只有工作,工作s2
上。
一些传统的,也许天真的解决办法是有某种缓存或存储,并就项目工作,只有当两个消息都是在缓存中。
我想知道,如果卡夫卡提供了一个解决这个问题。
大多数现代的流处理引擎,如Apache Flink,Kafka Streams或Spark Streaming可以解决这个问题你。所有这三个都上阵测试卡夫卡消费者使用的情况下,像这样建。
即使在这些框架,有多种不同的方式来实现流加入像上面。在弗林克例如,可以使用具有类似于SQL的语法Table API。
我已经在过去使用看起来有点像在this SO answer的例子(你可以用卡夫卡源更换fromElements
)。
有一件事与流工作时,要记住的是,从两个卡夫卡主题t1
和t2
消费数据时,你没有任何排序保证。您的代码需要考虑到以任意顺序到达的消息。
编辑 - 刚刚意识到您的问题大概是你如何实现用卡夫卡流,而不是从卡夫卡数据流的连接。在这种情况下,你可能会发现相关信息here