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),需替换并安装

操作步骤:

  1. 使用文本编辑器(如vi)修改postgresql.conf。
  2. 修改后重启PostgreSQL服务生效:
    sudo systemctl restart postgresql  # 或使用docker restart容器名
    

二、创建复制权限用户并赋权

需创建一个专用用户,赋予复制流权限和数据库访问权限。

操作步骤:

  1. 登录PostgreSQL(使用超级用户如postgres):
    psql -U postgres -d postgres
    
  2. 创建用户并赋权:
    -- 创建用户(替换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将需要同步的表发布为逻辑复制源。

操作步骤:

  1. 在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>

七、验证配置

  1. 检查PostgreSQL日志:

    tail -f /var/log/postgresql/postgresql-[version]-main.log
    

    确认无错误日志(如could not connect to server、permission denied等)。

  2. 测试Flink CDC作业:
    在Spring Boot项目中启动Flink CDC作业,观察是否能正常捕获变更数据。

posted @ 2025-11-06 13:30  蓝迷梦  阅读(272)  评论(0)    收藏  举报