1

我有一个场景,我们有两个不同的流,我们在两个不同的时间获取它们的数据,我需要根据值中的时间戳加入它们。我将尝试通过以下示例进行解释。

输入流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中实现这一点。甚至可能吗?

点击查看图片

4

1 回答 1

1

仅使用卡夫卡,这将是非常困难的,几乎是不可能的。从理论上讲,您可以拥有一个从两个队列中读取的单例服务器,并通过从每个队列中读取足够多的内容来进行相关性,以便它在内存中具有相互匹配的记录。

如果您只希望在给定的时间窗口内关联数据,一些 Kafka 客户端库将在一个时间窗口内读取消息,因此您可以使用它。但是,从您的数据示例看来,除非您的时间戳只是消息到达时,否则情况可能会或可能不会。

但是,除非两个队列都以相同的方式分区,否则一旦您需要扩展到第二个实例,这一切都会崩溃。

或者,您写入中间数据存储以存储来自队列的数据并针对该数据进行查找。

于 2020-09-15T22:38:40.937 回答