Apache kafka 使用Kafka Streams DSL合并两个Kafka主题的事件时间

Apache kafka 使用Kafka Streams DSL合并两个Kafka主题的事件时间,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,我正在寻找一种方法,根据事件时间合并两个卡夫卡主题 例如,我有两个主题,其模式如下:{code>{event key}:{event time as value} topic I - { {1 :: 12:00pm} {2 :: 12:10pm} {3 :: 14:50pm} {4 :: 15:00pm} } topic II - { {1 :: 13:00pm} {2 :: 13:10pm} {3 :: 15:50pm} {4 :: 16:00pm} } 预期输出应如下所示: { {1 :

我正在寻找一种方法,根据事件时间合并两个卡夫卡主题

例如,我有两个主题,其模式如下:{code>{event key}:{event time as value}

topic I -  { {1 :: 12:00pm} {2 :: 12:10pm} {3 :: 14:50pm} {4 :: 15:00pm} }
topic II - { {1 :: 13:00pm} {2 :: 13:10pm} {3 :: 15:50pm} {4 :: 16:00pm} }
预期输出应如下所示:

{ {1 :: 12:00pm} {2 :: 12:10pm} {1 :: 13:00pm} {2 :: 13:10pm} {3 :: 14:50pm} {4 :: 15:00pm} {3 :: 15:50pm} {4 :: 16:00pm} }
有没有一种方法可以使用Kafka Streams DSL实现这一点

注意事项:原始主题很有可能不按事件时间排序,这是正常的。我希望算法始终选择当前位于每个主题开头的两个事件中最早的一个(与算法的工作方式相同)

Kafka Streams(从2.1.0版开始)实现您描述的精确算法。因此,一个简单的方法是:

StreamsBuilder builder=newstreamsbuilder();
建设者
.stream(Arrays.asList(“firstInputTopic”、“secondInputTopic”))
.to(“outputTopidName”);
你应该做你想做的。请注意,该程序将根据每个分区合并数据

也考虑配置<代码> Max。任务。空闲。MS < /代码> ./P> 有关更多详细信息,请阅读相应的KIP:

此外,您还需要实现和配置一个自定义的
TimestampExtractor
,它从值中获取时间戳