我有一个flink sql应用程序,它将来自Kafka的数据实时分组到数据库中。数据按照时间间隔进行聚合:[1, 5, 10, 30, 60min, daily] 并写入对应的DB表中。
我使用带水印的翻滚功能来聚合数据,例如GROUP BY TUMBLE(ts, INTERVAL '5' MINUTES) 具有以下配置:
table.exec.state.ttl = 24 h
table.exec.sink.not-null-enforcer = DROP
table.exec.emit.early-fire.enabled = true
table.exec.emit.early-fire.delay = 500 ms
table.optimizer.agg-phase-strategy= TWO_PHASE
table.exec.source.idle-timeout = 5000 ms
我在 AWS KDA 上运行该应用程序,每个 KPU 具有 4 个并行度和 2 个并行度(总共 2 个 KPU)。 kafka主题位于4个分区中。
应用程序在前 1.5 小时按预期运行,然后数据延迟增加并且缺少一些分组结果,这种情况每天都会重复,数据量和频率相似。
从指标来看,运行1.5小时(11:00)后,flink输入消息的趋势与Kafka的输入消息不匹配
Task:
1) Input from kafka
2) tumble into 1 min
3) Left join extra info to the 1 min result
4) tumble into 1, 5 min
5) Group and write to DB into 1,5,10,15,30,60 min
我更改了以下内容,情况仍然出现。
我想知道造成这种情况的可能原因以及解决此问题的建议,谢谢。
您应该使用窗口 TVF,而不是已弃用的旧组窗口聚合。这是为了获得更好的性能而优化的。您可以在文档 [1] 中找到有关语法和配置的详细信息。
[1] https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/window-tvf/