实时处理期间窗口键发射的延迟

时间:2020-10-08 23:42:41

标签: apache-kafka apache-kafka-streams

下面是Kafka流拓扑,它发出实时聚合密钥及其值。发出记录时观察延迟。新记录到达后,排放以秒为单位,而不是立即发生,这违反了客户的SLA。

您可以建议调整即时按键发射吗?

KTable<Windowed<String>, JsonNode> aggregateTable =
  transactions
    .groupByKey()
    .windowedBy(TimeWindows.of(Duration.ofSeconds(windowDuration)).grace(Duration.ofSeconds(windowGraceDuration)))
    .aggregate(() -> new AggregationService().initialize(),
               (key, transaction, previousStats) -> new AggregationService().build(key, transaction, previousStats, runByUnit),
               Materialized.<String, JsonNode, WindowStore<Bytes, byte[]>>as(statStoreName).withRetention(Duration.ofSeconds((windowDuration + windowGraceDuration + windowRetentionDuration)))
                                                .withKeySerde(Serdes.String())
                                                .withValueSerde(jsonSerde)));
aggregateTable.toStream().toTopic(..);

1 个答案:

答案 0 :(得分:0)

您的拓扑包括在一个窗口上的聚合,这意味着将在该窗口期内收集数据,并在抛出结果之前等待。

此外,您还为数据的延迟到达设置了宽限期。

因此,您的最小延迟时间将是windowDuration + windowGraceDuration。如果要减少时间,则必须减少这两个值,但这会大大改变您的总体结果。