【问题标题】:How to implement windowing in Kafka Streams by a defined time window of 5 seconds?如何通过定义的 5 秒时间窗口在 Kafka Streams 中实现窗口化?
【发布时间】:2019-07-29 02:11:36
【问题描述】:

我正在尝试使用 Kafka Streams 实现窗口化,其中我们从一个主题中获取了一堆 JSON 格式的不同事务。对于每个事务 ID,可以有多个提交(从 SQL 提交的角度考虑,因此不同事务 ID 的多个事务)。我需要为微批处理设置一个窗口,其中我将每 5 秒使用一次数据,并且数据存储在基于事务 ID 的目录中。

我想知道这里的方法以及应该使用什么库/函数/类?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api apache-kafka-streams kafka-producer-api ksqldb


    【解决方案1】:

    您可以通过多种方式在 kafka 流中使用 Windowing。翻滚窗口的一个示例(如您的情况)

    builder.stream("events")
        .groupByKey()
        .windowedBy(TimeWindows.of(TimeUnit.SECONDS.toMillis(10)))
        .count()
        .suppress(untilWindowCloses(BufferConfig.unbounded()))
        .toStream()
        .process(FileSink::new);
    

    您可以在这里找到更多详细信息:
    https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html#tumbling-time-windows

    【讨论】:

    • 这里的“抑制”和“处理”有什么用?我需要按我的 json 键分组,然后根据键将其分支到不同的文件
    • .suppress() 方法来抑制来自窗口的中间结果,即如果您只想在窗口关闭后而不是每次都获得最终结果,而 .process 方法用于调用任何自定义处理器.在这种情况下,我以 FileSink 为例。
    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多