apache-kafka - Kafka - 当数据在不同时间出现时从两个不同的流中加入数据
问题描述
我有一个场景,我们有两个不同的流,我们在两个不同的时间获取它们的数据,我需要根据值中的时间戳加入它们。我将尝试通过以下示例进行解释。
输入流1->
- 键 111,价值 21:00 AAA
- 键 111,值 21:02 AAA
- 键 111,值 21:04 AAA
- 键 111,值 21:15 AAA
- 键 111,值 21:18 BBB
- 键 111,值 21:20 BBB
输入流2->
- 键 111,值 21:01 10.0.0.1
- 键 111,值 21:04 10.0.0.2
- 键 111,值 21:14 10.0.0.3
- 键 111,值 21:20 10.0.0.4
- 键 111,值 21:21 10.0.0.5
输出加入我需要的 ->
- AAA 10.0.0.1
- AAA 10.0.0.2
- AAA 10.0.0.3
- BBB 10.0.0.4
- BBB 10.0.0.5
注意:两个流在不同时间获取输入。当 inputStream1 的第一条记录到达时,inputStream2 可能有所有 5 条记录。我想在值中的时间窗口上匹配它们。
我怎样才能在kafka中实现这一点。甚至可能吗?
解决方案
仅使用卡夫卡,这将是非常困难的,几乎是不可能的。从理论上讲,您可以拥有一个从两个队列中读取的单例服务器,并通过从每个队列中读取足够多的内容来进行相关性,以便它在内存中具有相互匹配的记录。
如果您只希望在给定的时间窗口内关联数据,一些 Kafka 客户端库将在一个时间窗口内读取消息,因此您可以使用它。但是,从您的数据示例看来,除非您的时间戳只是消息到达时,否则情况可能会或可能不会。
但是,除非两个队列都以相同的方式分区,否则一旦您需要扩展到第二个实例,这一切都会崩溃。
或者,您写入中间数据存储以存储来自队列的数据并针对该数据进行查找。
推荐阅读
- android - 文本大小增量在 Android 中不起作用
- node.js - 运行 npm install @angular/pwa 时出现错误 Rolling back node-pre-gyp@0.14.0 failed
- mongodb - 猫鼬当我使用更新时,它不会更新状态为 200(成功)的任何内容
- php - GAE - 实例似乎死亡并返回 502,而不是优雅地部署
- deployment - 在 Azure DevOps 部署后批准邮件中获取更多详细信息
- javascript - 使用 useState React Native 编辑数组
- java - 如何在我的机器上的 docker 守护进程和 Jenkins 之间建立连接以执行 docker 命令?
- c - 有人可以帮助找出这个找到2个排序数组中位数的代码有什么问题吗
- csv - 如何使用 AWK 将 .txt 文件转换为 .csv
- android - AppiumOptions:System.TypeLoadException:'访问被拒绝:'OpenQA.Selenium.Remote.DesiredCapabilities'。