【问题标题】:Event-Time merge of two Kafka topics using Kafka Streams DSL使用 Kafka Streams DSL 合并两个 Kafka 主题的事件时间
【发布时间】:2020-01-07 07:21:54
【问题描述】:

我正在寻找一种基于事件时间合并两个 Kafka 主题的方法。

例如,我有两个主题具有以下架构 {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 来做到这一点?

注意:很有可能原始主题没有按事件时间排序,这没关系。我希望算法始终选择当前处于每个主题头部的两个事件中最早的事件(与 merge two sorted arrays 算法的工作方式相同)

【问题讨论】:

    标签: apache-kafka apache-kafka-streams


    【解决方案1】:

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

    StreamsBuilder builder = new StreamsBuilder();
    builder
        .stream(Arrays.asList("firstInputTopic", "secondInputTopic"))
        .to("outputTopidName");
    

    应该做你想做的。请注意,该程序将基于每个分区合并数据。

    还要考虑配置max.task.idle.ms

    更多详情请阅读相应的KIP:https://cwiki.apache.org/confluence/display/KAFKA/KIP-353%3A+Improve+Kafka+Streams+Timestamp+Synchronization

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

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多