Flink pg cdc 如果pg表一天没有数据写入 会导致pg的wal日志越来越大 有什么解决思路么?
当使用Flink PG CDC连接器处理PostgreSQL数据库时,若表在某一天没有数据写入,理论上不会导致WAL(Write-Ahead Log)日志大小持续增大。WAL主要用于记录所有数据库更改,以确保事务的持久性和可恢复性。即便没有新的数据写入,数据库的日常运维操作,如检查点创建、自动清理策略的缺失或配置不当,仍可能导致WAL文件累积。
Flink可以通过调整Paimon表的写入模式来适应您的需求。如果您希望使用窗口操作(如window)和窗口函数(如sum() over()),并且当前因使用了Change-log模式遇到限制,您可以考虑将Paimon表的写入模式改为Append-only模式
Flink CDC连接的PG表长时间无数据写入,PG的WAL日志可能会持续增长。解决思路如下:
配置WAL保留策略:调整wal_keep_segments参数,设置合理的WAL段保留数量,防止无数据时WAL日志堆积。
定期清理:配置一个定时任务,读取并处理WAL,即使无数据变更,也可以定期触发Flink CDC消费,清理WAL。
暂停与恢复CDC:在长时间无数据时,暂停CDC任务,避免无效读取。有数据时再恢复,但请注意,这可能导致数据丢失。
监控与报警:设置WAL大小监控和报警,当达到一定阈值时,采取清理或暂停措施。
定期执行Checkpoint
Flink作业定期完成Checkpoint,因为Flink CDC在Checkpoint时会更新PostgreSQL的复制槽(replication slot)中的LSN(Log Sequence Number),从而允许PostgreSQL安全地回收不再需要的WAL日志
。检查并优化Checkpoint策略,确保其既不过于频繁导致性能损耗,也不过于稀疏导致WAL积累
参考文档:https://help.aliyun.com/zh/flink/support/troubleshooting
另外可以
在应用的写负载不变的情况下,减少WAL生成量主要有下面几种办法。
延长checkpoint时间间隔
FPI产生于checkpoint之后第一次变脏的page,在下次checkpoint到了之前,已经输出过PFI的page是不需要再次输出FPI。因此checkpoint时间间隔越长,FPI产生的频度会越低。增大checkpoint_timeout和max_wal_size可以延长checkpoint时间间隔。
增加HOT_UPDATE比例
普通的UPDATE经常需要更新2个数据块,并且可能还要更新索引page,这些又都有可能产生FPI。而HOT_UPDATE只修改1个数据块,需要写的WAL量也大大减少。
压缩
PostgreSQL9.5新增加了一个wal_compression参数,设为on可以对FPI进行压缩,削减WAL的大小。另外还可以在外部通过SSL/SSH的压缩功能减少主备间的通信流量,已经自定义归档脚本对归档的WAL进行压缩。
——参考链接。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。