Kafka-当数据在不同的时间到达时,从两个不同的流中合并数据

时间:2020-09-15 12:36:54

标签: apache-kafka apache-kafka-streams kafka-join

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

inputStream1->

  • 键111,值21:00 AAA
  • 键111,值21:02 AAA
  • 键111,值21:04 AAA
  • 键111,值21:15 AAA
  • 键111,值21:18 BBB
  • 键111,值21:20 BBB

inputStream2->

  • 键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

输出我需要的Join->

  • 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中实现这一目标。甚至有可能吗?

Click to see the image

1 个答案:

答案 0 :(得分:0)

仅靠卡夫卡就很难甚至几乎不可能。从理论上讲,您可以有一个单例服务器,它可以从两个队列中读取数据,并通过从每个队列中读取足够的数据来进行关联,从而使其内存中的记录彼此匹配。

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

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

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