如何解决实时处理期间窗口键发射的延迟
下面是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,previousStats,runByUnit),Materialized.<String,JsonNode,WindowStore<Bytes,byte[]>>as(statStoreName).withRetention(Duration.ofSeconds((windowDuration + windowGraceDuration + windowRetentionDuration)))
.withKeySerde(Serdes.String())
.withValueSerde(jsonSerde)));
aggregateTable.toStream().toTopic(..);
解决方法
您的拓扑包括在一个窗口上的聚合,这意味着将在该窗口期内收集数据,并在抛出结果之前等待。
此外,您还为数据的延迟到达设置了宽限期。
因此,您的最小延迟时间将是windowDuration + windowGraceDuration
。如果要减少时间,则必须减少这两个值,但这会大大改变您的总体结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。