开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink pg cdc 如果pg表一天没有数据写入会导致pg的wal日志越来越大有什么解决思路么?

Flink pg cdc 如果pg表一天没有数据写入 会导致pg的wal日志越来越大 有什么解决思路么?

展开
收起
夹心789 2024-06-04 09:08:54 99 0
6 条回答
写回答
取消 提交回答
  • 当使用Flink PG CDC连接器处理PostgreSQL数据库时,若表在某一天没有数据写入,理论上不会导致WAL(Write-Ahead Log)日志大小持续增大。WAL主要用于记录所有数据库更改,以确保事务的持久性和可恢复性。即便没有新的数据写入,数据库的日常运维操作,如检查点创建、自动清理策略的缺失或配置不当,仍可能导致WAL文件累积。

    2024-08-03 17:09:43
    赞同 展开评论 打赏
  • Flink可以通过调整Paimon表的写入模式来适应您的需求。如果您希望使用窗口操作(如window)和窗口函数(如sum() over()),并且当前因使用了Change-log模式遇到限制,您可以考虑将Paimon表的写入模式改为Append-only模式

    2024-07-27 18:17:40
    赞同 展开评论 打赏
  • Flink CDC连接的PG表长时间无数据写入,PG的WAL日志可能会持续增长。解决思路如下:

    配置WAL保留策略:调整wal_keep_segments参数,设置合理的WAL段保留数量,防止无数据时WAL日志堆积。
    定期清理:配置一个定时任务,读取并处理WAL,即使无数据变更,也可以定期触发Flink CDC消费,清理WAL。
    暂停与恢复CDC:在长时间无数据时,暂停CDC任务,避免无效读取。有数据时再恢复,但请注意,这可能导致数据丢失。
    监控与报警:设置WAL大小监控和报警,当达到一定阈值时,采取清理或暂停措施。

    2024-07-26 11:40:10
    赞同 展开评论 打赏
  • 当使用 Flink CDC (Change Data Capture) 连接 PostgreSQL (PG) 时,如果某个表长时间没有数据写入,确实可能会导致 PG 的 WAL (Write-Ahead Log) 日志不断增长。这是因为 Flink CDC 通过跟踪 WAL 来捕捉表的变更事件。如果没有新的写入操作,但 Flink CDC 仍在持续运行,它将继续监听 WAL 并可能会导致 WAL 文件堆积。

    解决思路:
    定期重置 WAL
    你可以定期重置 PG 的 WAL,但这会中断 Flink CDC 的连续捕获。为了避免数据丢失,你需要确保在重置之前有一个备份点或检查点,以便在重置后从上次的捕获位置恢复。
    使用逻辑解码插槽
    PostgreSQL 提供了逻辑解码插槽 (logical decoding slot) 的功能,可以在不消耗 WAL 的情况下捕获变更事件。你可以设置一个逻辑解码插槽,并让 Flink CDC 连接到这个插槽上。
    当你不再需要捕获某个表的变更时,可以删除对应的逻辑解码插槽,这将允许 PostgreSQL 自动回收相关的 WAL 数据。
    定期检查点
    如果你的 Flink 作业配置了定期检查点 (checkpointing),那么在每个检查点完成之后,Flink CDC 会自动清除不再需要的 WAL 数据。因此,确保你的 Flink 作业正确地配置了检查点机制。
    使用最小化模式 (minimal mode)
    PostgreSQL 的 WAL 写入有两种模式:完整模式 (full) 和最小化模式 (minimal)。默认情况下,PostgreSQL 使用完整模式,这意味着所有事务都会写入 WAL。你可以考虑将 PostgreSQL 配置为最小化模式,这会减少 WAL 的写入量。然而,这样做可能会降低崩溃恢复时的完整性。
    要更改此设置,你需要编辑 postgresql.conf 文件中的 wal_level 设置,将其设置为 minimal。
    优化 Flink CDC 配置
    确保 Flink CDC 的配置尽可能地优化,避免不必要的资源消耗。例如,确保只捕获需要的表,并且尽量减少不必要的字段捕获。
    使用 Flink 的状态后端
    确保你的 Flink 作业使用了合适的 State Backend,如 RocksDBStateBackend,它可以有效地管理状态数据,并支持高效的检查点机制。
    手动触发检查点
    如果你发现 WAL 日志仍然在不断增长,可以考虑手动触发检查点。这将强制 Flink CDC 释放不再需要的 WAL 数据。
    监控和告警
    设置监控和告警机制,以便及时检测 WAL 日志的增长情况,并采取相应的措施。图片.png

    2024-07-26 09:56:22
    赞同 展开评论 打赏
  • 阿里云大降价~

    定期执行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

    另外可以image.png

    2024-07-24 18:10:09
    赞同 展开评论 打赏
  • 在应用的写负载不变的情况下,减少WAL生成量主要有下面几种办法。

    • 延长checkpoint时间间隔
      FPI产生于checkpoint之后第一次变脏的page,在下次checkpoint到了之前,已经输出过PFI的page是不需要再次输出FPI。因此checkpoint时间间隔越长,FPI产生的频度会越低。增大checkpoint_timeout和max_wal_size可以延长checkpoint时间间隔。
      image.png

    • 增加HOT_UPDATE比例
      普通的UPDATE经常需要更新2个数据块,并且可能还要更新索引page,这些又都有可能产生FPI。而HOT_UPDATE只修改1个数据块,需要写的WAL量也大大减少。
      image.png

    • 压缩
      PostgreSQL9.5新增加了一个wal_compression参数,设为on可以对FPI进行压缩,削减WAL的大小。另外还可以在外部通过SSL/SSH的压缩功能减少主备间的通信流量,已经自定义归档脚本对归档的WAL进行压缩。
      image.png

    ——参考链接

    2024-07-23 10:13:09
    赞同 1 展开评论 打赏
滑动查看更多

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
    Kubernetes下日志实时采集、存储与计算实践 立即下载
    日志数据采集与分析对接 立即下载