Flink-CDC-PostgreSQL 之 PostgreSQL的配置
在Spring Boot集成Flink CDC实时订阅PostgreSQL数据库时,PostgreSQL端的配置和设置需围绕逻辑解码(Logical Decoding)和复制权限展开。以下是详细步骤和配置内容示例:
一、修改PostgreSQL配置文件(postgresql.conf)
需修改PostgreSQL主配置文件postgresql.conf,以启用逻辑解码和调整复制参数。该文件通常位于PostgreSQL数据目录(如/var/lib/postgresql/data/)或通过SHOW config_file;命令查询路径。
配置内容示例:
# 启用逻辑解码(必须)
wal_level = logical # 可选值:minimal、replica、logical
# 调整复制槽数量(默认10),Flink CDC每张表默认占用一个槽
max_replication_slots = 20 # 根据实际表数量调整
# 调整WAL发送进程数(默认10),需与max_replication_slots一致
max_wal_senders = 20
# 设置复制连接超时时间(默认60s,0表示禁用)
wal_sender_timeout = 180s # 适当增大以避免连接中断
# 加载逻辑解码插件(PostgreSQL 10+默认使用pgoutput,无需额外安装)
shared_preload_libraries = 'pgoutput' # 若使用其他插件(如decoderbufs),需替换并安装
操作步骤:
- 使用文本编辑器(如
vi)修改postgresql.conf。 - 修改后重启PostgreSQL服务生效:
sudo systemctl restart postgresql # 或使用docker restart容器名
二、创建复制权限用户并赋权
需创建一个专用用户,赋予复制流权限和数据库访问权限。
操作步骤:
- 登录PostgreSQL(使用超级用户如
postgres):psql -U postgres -d postgres - 创建用户并赋权:
-- 创建用户(替换username和password为实际值) CREATE USER flink_cdc_user WITH PASSWORD 'your_password'; -- 赋予复制流权限 ALTER ROLE flink_cdc_user REPLICATION; -- 赋予目标数据库连接权限(替换db_name为实际数据库名) GRANT CONNECT ON DATABASE db_name TO flink_cdc_user; -- 赋予目标schema下所有表的查询权限(替换schema_name为实际schema名) GRANT USAGE ON SCHEMA schema_name TO flink_cdc_user; GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO flink_cdc_user;
三、发布表以启用逻辑复制
需通过PUBLICATION将需要同步的表发布为逻辑复制源。
操作步骤:
- 在PostgreSQL中执行以下SQL:
-- 发布所有表(替换schema_name为实际schema名) CREATE PUBLICATION flink_cdc_pub FOR ALL TABLES IN SCHEMA schema_name; -- 或按需发布特定表 -- CREATE PUBLICATION flink_cdc_pub FOR TABLE schema_name.table1, schema_name.table2; -- 查询已发布的表 SELECT * FROM pg_publication_tables;
四、调整表的复制标识(可选)
对于需要捕获更新(UPDATE)和删除(DELETE)前镜像的表,需修改复制标识为FULL。
操作步骤:
-- 修改复制标识(替换table_name为实际表名)
ALTER TABLE schema_name.table_name REPLICA IDENTITY FULL;
-- 验证复制标识(返回'f'表示成功)
SELECT relreplident FROM pg_class WHERE relname = 'table_name';
五、Spring Boot项目配置示例
在Spring Boot项目的application.properties或application.yml中配置Flink CDC连接信息:
application.properties示例:
# Flink CDC PostgreSQL连接配置
flink.cdc.source.connector=postgres-cdc
flink.cdc.source.hostname=localhost
flink.cdc.source.port=5432
flink.cdc.source.database-name=db_name
flink.cdc.source.schema-name=schema_name
flink.cdc.source.table-name=table_name # 支持正则表达式,如schema_name.*
flink.cdc.source.username=flink_cdc_user
flink.cdc.source.password=your_password
flink.cdc.source.decoding-plugin-name=pgoutput # 与postgresql.conf中一致
flink.cdc.source.slot-name=flink_cdc_slot # 可选,指定复制槽名称
六、依赖配置(pom.xml)
确保项目中包含Flink CDC PostgreSQL连接器依赖:
<dependency>
<groupId>com.ververica</groupId>
<artifactId>flink-connector-postgres-cdc</artifactId>
<version>2.4.0</version> # 使用最新稳定版本
</dependency>
七、验证配置
-
检查PostgreSQL日志:
tail -f /var/log/postgresql/postgresql-[version]-main.log确认无错误日志(如
could not connect to server、permission denied等)。 -
测试Flink CDC作业:
在Spring Boot项目中启动Flink CDC作业,观察是否能正常捕获变更数据。
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19196302

浙公网安备 33010602011771号