解决Flink SQL windows tumble性能下降问题

问题描述 投票:0回答:1

我有一个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的输入消息不匹配

flink input vs kafka input

flink input vs task resources

task status when output normally

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

task status when output unexpected

我更改了以下内容,情况仍然出现。

  1. 更换更好的数据库实例类型
  2. 更换更好的Kafka集群实例类型
  3. 设置4个并行度和每个KPU 1个并行度(总共4个KPU)

我想知道造成这种情况的可能原因以及解决此问题的建议,谢谢。

apache-flink flink-streaming flink-sql amazon-kinesis-analytics
1个回答
0
投票

您应该使用窗口 TVF,而不是已弃用的旧组窗口聚合。这是为了获得更好的性能而优化的。您可以在文档 [1] 中找到有关语法和配置的详细信息。

[1] https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/window-tvf/

© www.soinside.com 2019 - 2024. All rights reserved.