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

Apache kafka 实时处理期间窗口按键发射的延迟,apache-kafka,apache-kafka-streams,Apache Kafka,Apache Kafka Streams,下面是Kafka流拓扑,它发出实时聚合密钥及其值。在发出记录时观察延迟。新记录到达后,以秒为单位而不是瞬间发出,这违反了客户端的SLA 您能建议调整即时按键发射吗 KTable aggregateTable= 交易 .groupByKey() .windowedBy(TimeWindows.of(持续时间秒(windowDuration)).grace(持续时间秒(windowGraceDuration))) .aggregate(()->new AggregationService().ini

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

您能建议调整即时按键发射吗

KTable aggregateTable=
交易
.groupByKey()
.windowedBy(TimeWindows.of(持续时间秒(windowDuration)).grace(持续时间秒(windowGraceDuration)))
.aggregate(()->new AggregationService().initialize(),
(键,事务,previousStats)->新建AggregationService().build(键,事务,previousStats,runByUnit),
具体化的.as(statStoreName).withRetention(持续时间为秒((windowDuration+windowGraceDuration+windowRetentionDuration)))
.withKeySerde(Serdes.String())
.使用ValueSerde(jsonSerde));
aggregateTable.toStream().toTopic(..);

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

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


因此,您的最小延迟时间为:
windowDuration+windowGraceDuration
。如果您想减少时间,您必须减少这两个值,但这将显著改变您的总体结果。

谢谢Mike的回复,上述拓扑在窗口关闭之前不会发出间歇性聚合,因为我没有使用抑制功能,该功能保留最近的键及其值,并在windowDuration+windowGraceDuration之后发出。我面临的问题是拓扑需要时间以秒而不是以米尔斯秒的形式发出最终结果,这是不可预料的。我收到的事务是10/9/2020 5.56.01,它进行聚合,但在10/9/2020 5.56.05发出最终结果,这意味着在4秒后禁用记录缓存: