apache-kafka - Kafka 流可以有效地处理加入流吗?
问题描述
我是 Kafka 的新手,我想知道我的计划是否可行且合理。
假设我们有两个源,它们分别向主题 和s1
发出s2
一些消息。现在,我想要一个接收两个主题的接收器,并且我希望它处理消息的元组。t1
t2
<m1, m2>
m1.key == m2.key
如果m1.key
从未在 的某些消息中找到s2
,则接收器完全忽略m1.key
(永远不会处理它)。
总而言之,接收器将仅对已使用的键s1
起作用s2
。
一些传统的并且可能是幼稚的解决方案是拥有某种缓存或存储,并且仅当两条消息都在缓存中时才对项目进行处理。
我想知道卡夫卡是否提供了解决这个问题的方法。
解决方案
大多数现代流处理引擎,例如Apache Flink、Kafka Streams或Spark Streaming都可以为您解决这个问题。这三个人都为这样的用例构建了经过实战考验的 Kafka 消费者。
即使在这些框架中,也有多种不同的方法可以实现上述流式连接。例如,在 Flink 中,可以使用具有类似 SQL 语法的Table API 。
我过去使用的看起来有点像这个 SO 答案中的例子 (你可以fromElements
用 Kafka Source 替换)。
使用流时要记住的一件事是,在使用来自两个 Kafka 主题t1
和t2
. 您的代码需要考虑以任何顺序到达的消息。
编辑 - 刚刚意识到您的问题可能是关于如何使用 Kafka 流而不是来自 Kafka 的数据流来实现连接。在这种情况下,您可能会在此处找到相关信息
推荐阅读
- python - Pandas:根据条件获取索引号
- php - 如何从 php 中的 Celery Redis 后端获取结果?
- docker - Dockerfile Build Error:系统找不到指定的路径
- ios - 无法上传到 App Store Connect 并出现错误“未找到具有 App Store Connect 访问权限的帐户”
- python - 如何使用 HTML 保存 matplotlib 图形以保持动态功能(缩放...)?
- flutter - 为 Flutter 制作多个 Laravel Echo 实例
- python - 如何获得序列模型 Sklearn 的给定预测的概率
- r - 循环输出存储为列表
- html - 如何在全屏视频中显示徽标?
- c# - 在多个子类中覆盖 dispose 方法