簡體   English   中英

事件計數的窗口聚合

[英]A windowed aggregation on event count

我對我的 kafka 事件進行了分組:

    private static void createImportStream(final StreamsBuilder builder, final Collection<String> topics) {
        final KStream<byte[], GraphEvent> stream = builder.stream(topics, Consumed.with(Serdes.ByteArray(), new UserEventThriftSerde()));
        stream.filter((key, request) -> {
            return Objects.nonNull(request);
        }).groupBy(
                (key, value) -> Integer.valueOf(value.getSourceType()),
                Grouped.with(Serdes.Integer(), new UserEventThriftSerde()))
              .aggregate(ArrayList::new, (key, value, aggregatedValue) -> {
                          aggregatedValue.add(value);
                          return aggregatedValue;
                      },
                      Materialized.with(Serdes.Integer(), new ArrayListSerde<UserEvent>(new UserEventThriftSerde()))
              ).toStream();
    }

如何添加window但不是基於時間,而是基於事件數量。 原因是事件將是批量轉儲,時間窗口聚合不適合,因為所有事件都可能在相同的幾秒鍾內出現。

Kafka Streams 不支持開箱即用的基於計數的窗口,因為它們是不確定的,並且很難處理亂序數據。

不過,您可以使用處理器 API 為您的用例構建自定義運算符,而不是使用 DSL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM