flink cdc抽取hologres 2张表采用的增量模式,2个表的增量数据每天都在8000w左右,现在的问题是刚开始运行的时候sink端busy会随着时间增大,最后产生背压,需要无状态重启一下才能恢复?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您描述的问题,Flink CDC 抽取 Hologres 的两张表采用增量模式,每天增量数据量约为 8000w。在运行过程中,sink 端的 busy
状态会随着时间逐渐增大,最终导致背压(backpressure),需要通过无状态重启才能恢复。以下是针对该问题的详细分析和解决方案。
Hologres 的写入性能受多种因素影响,包括存储格式、Insert 模式、Table Group 配置以及 Shard 数量等。如果目标表的配置不合理,可能会导致写入延迟增加,进而引发背压。
InsertOrReplace
和 InsertOrUpdate
在行存表中性能较好,但在列存表中可能表现较差。如果 Flink 作业的数据分发不均匀,可能导致某些分区或 Shard 的写入压力过大,从而引发背压。可以通过检查数据分布来确认是否存在数据倾斜。
Hologres 实例的整体负载较高时,写入性能会显著下降。如果实例资源不足,可能会导致 sink 端的 busy
状态持续升高。
JDBC 模式下,Hologres Connector 会占用一定数量的连接数。如果作业并发较高且未启用连接复用,可能会导致连接数耗尽,进而影响写入性能。
InsertOrIgnore
;对于行存表,优先使用 InsertOrReplace
或 InsertOrUpdate
。SELECT shard_id, COUNT(*) AS record_count
FROM hologres_table
GROUP BY shard_id
ORDER BY record_count DESC;
如果发现某些 Shard 的数据量显著高于其他 Shard,说明存在数据倾斜。可以通过调整 Distribution Key 来优化数据分布。
connectionPoolName
参数以优化性能。例如:
'connectionPoolName' = 'hot_table_pool'
connectionSize
参数,确保每个并发的连接数足够支持高并发写入。'async' = 'true'
检查目标表配置:
检查数据分布:
监控后端集群负载:
优化连接数配置:
connectionPoolName
。connectionSize
参数以支持高并发写入。调整 Flink 作业配置:
通过以上优化措施,可以有效缓解 sink 端 busy
状态升高和背压问题,提升作业的稳定性和性能。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。