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

Flink CDC有没有人遇到过pg的复制槽,表的复制标识这块设置问题?

Flink CDC有没有人遇到过pg的复制槽,表的复制标识这块设置问题?就是表的复制标识必须设置成full,感觉这个开销大如果是默认主键的逻辑的话好像是会报The "before" field of UPDATE/DELETE message is null, please check the Postgres table has been set REPLICA IDENTITY to FULL level. You can update the setting by running the command in Postgres 'ALTER TABLE public.resident REPLICA IDENTITY FULL'. Please see more in Debezium documentation:

展开
收起
真的很搞笑 2023-11-07 19:39:16 269 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    是的,这个问题可能是由于PostgreSQL中的复制槽设置不当导致的。PostgreSQL使用复制槽来跟踪哪些binlog已经被读取,以及如何从它们中提取变更数据。如果没有正确的设置,Flink CDC可能无法正确地跟踪binlog,从而导致错误或丢弃变更事件。

    对于PostgreSQL的每张表,都应该设置复制标识(replica identity)为FULL。这是因为,只有当replica identity设置为FULL时,PostgreSQL才会提供完整的行变更历史记录,包括INSERT、UPDATE和DELETE操作。

    要解决这个问题,您可以执行如下命令,将所有表的replica identity设置为FULL:

    ALTER TABLE <table_name> REPLICA IDENTITY FULL;
    

    其中是您希望更改的表名。此命令将确保Flink CDC可以正确地读取并跟踪表的变更事件。注意,该操作可能会影响性能,因为它会增加PostgreSQL的写入负载,但可以帮助保证Flink CDC的正确性。

    2023-11-11 15:04:48
    赞同 展开评论 打赏
  • 是的,Flink CDC在处理PostgreSQL数据库时,确实需要确保表的复制标识设置为FULL。这是因为在执行UPDATE/DELETE操作时,Debezium会检查"before"字段是否为null,如果为null,则会报错。因此,为了解决这个问题,你需要在PostgreSQL中运行以下命令来设置表的复制标识为FULL:

    ALTER TABLE public.resident REPLICA IDENTITY FULL;
    

    你可以在Debezium文档中找到更多关于PostgreSQL连接器的信息:https://debezium.io/documentation/reference/1.5/connectors/postgresql.html#postgresql-replica-identity

    2023-11-10 10:31:05
    赞同 1 展开评论 打赏

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

相关产品

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

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载