参考
版本:Flink 1.13.6、Flink CDC 2.1.0、Postgresql 10
需要更改 postgresql.conf
# 更改wal日志方式为logical
wal_level = logical # minimal, replica, or logical
# 更改solts最大数量(默认值为10),flink-cdc默认一张表占用一个
slotsmax_replication_slots = 20 # max number of replication slots
# 更改wal发送最大进程数(默认值为10),这个值和上面的solts设置一样
max_wal_senders = 20 # max number of walsender processes
# 中断那些停止活动超过指定毫秒数的复制连接,可以适当设置大一点(默认60s)
wal_sender_timeout = 180s # in milliseconds; 0 disable
Flink CDC 连接 postgresql 遇到的问题
-
错误: 无法访问文件 “decoderbufs”: 没有那个文件或目录:Flink CDC 集成了 debezium,debezium 从 postgresql 采集数据需要 decoderbufs 插件支持,所以要在 postgresql 上安装 decoderbufs。
这个需要下载源码手动编译,同时需要依赖 Protobuf、Protobuf-c、PostGIS 才能编译。
由于我 yum 不能安装,只能手动编译:Postgre SQL-decoderbufs配置方法(相当麻烦)
-
IDE 访问 pg 报错:cannot access com.google.protobuf.GeneratedMessageV3:需要在 pom 文件添加依赖
-
flink-cdc 可以查询 pg 数据,但不能捕捉更新数据:需要ALTER TABLE xxx REPLICA IDENTITY FULL;
-
org.postgresql.util.PSQLException: 错误: replication slot 正用于 PID 28817:需要指定
slot.name
(默认为 flink),Flink CDC 默认一张表占用一个 slot。多个未指定 slot.name 的连接会产生冲突。 -
致命错误: 所要求的备用服务器连接数超过了参数max_wal_senders的值(当前设置为10):当前连接数超过
max_wal_senders
。需要在 postgresql.conf 增大max_wal_senders
。postgres=# select pid, usename, application_name, backend_type, backend_start from pg_stat_activity; pid | usename | application_name | backend_type | backend_start -------+----------+---------------------------------------------+---------------------+------------------------------- 20889 | | | autovacuum launcher | 2022-04-02 10:31:44.623142+08 20891 | postgres | | background worker | 2022-04-02 10:31:44.624378+08 65726 | postgres | psql | client backend | 2022-04-08 10:02:44.980358+08 49334 | hxp | PostgreSQL JDBC Driver | client backend | 2022-04-06 11:01:00.868736+08 49349 | hxp | PostgreSQL JDBC Driver | walsender | 2022-04-06 11:01:01.345935+08 21140 | hxp | DBeaver 21.2.3 - Main <big_data_public> | client backend | 2022-04-02 10:33:36.912172+08 21141 | hxp | DBeaver 21.2.3 - Metadata <big_data_public> | client backend | 2022-04-02 10:33:36.9758+08 20887 | | | background writer | 2022-04-02 10:31:44.61592+08 20886 | | | checkpointer | 2022-04-02 10:31:44.610283+08 20888 | | | walwriter | 2022-04-02 10:31:44.616197+08 (10 行记录)
-
org.postgresql.util.PSQLException: 错误: 所有的复制槽都在使用中:槽数量超过
max_replication_slots
(默认是 10)。需要在 postgresql.conf 增大 max_replication_slots。或者删除不需要的槽:SELECT pg_drop_replication_slot('xxx');
postgres=# SELECT * FROM pg_replication_slots; slot_name | plugin | slot_type | ------------------+-------------+-----------+ decoderbufs_demo | decoderbufs | logical | flink | decoderbufs | logical | xxx | decoderbufs | logical | a | decoderbufs | logical | b | decoderbufs | logical | c | decoderbufs | logical | d | decoderbufs | logical | e1 | decoderbufs | logical | f | decoderbufs | logical | g | decoderbufs | logical | (10 行记录)