Flink CDC中pgcdc连接的lsn只在主节点更新,从节点不更新lsn,这个情况是cdc的问题还是我pg数据库的问题?
你说的是正确的。在pgcdc(Postgres CDC)中,只有主节点会更新LSN(逻辑位序号),从节点不会更新LSN。
这是因为:
LSN是用来跟踪pgcdc已经读取过的WAL(写入日志)位置的。主服务器上的WAL文件才是真实的数据变更,从服务器只是主服务器的镜像。
pgcdc通过在主服务器上启动心跳线程,定期查询新的LSN值,然后使用该LSN值从WAL文件读取数据变更事件。
从服务器上的只是主服务器的复制,主从复制通常会延迟,所以从服务器当前的LSN值比主服务器小。
如果pgcdc使用从服务器的LSN值,可能会导致数据丢失,因为从服务器复制过来的数据可能比pgcdc已经消费过的数据还要早。
所以pgcdc只能使用主服务器的LSN值来保障数据完整性,从服务器的LSN值pgcdc忽略。
因此,pgcdc只使用主节点的LSN值来跟踪已经消费过的数据范围,从节点的LSN无关。这么设计是为了保证pgcdc最终能捕获到Postgres数据库的所有变更事件。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。