下面是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(..);
答案 0 :(得分:0)
您的拓扑包括在一个窗口上的聚合,这意味着将在该窗口期内收集数据,并在抛出结果之前等待。
此外,您还为数据的延迟到达设置了宽限期。
因此,您的最小延迟时间将是windowDuration + windowGraceDuration
。如果要减少时间,则必须减少这两个值,但这会大大改变您的总体结果。