flink cdc捕获postgresql数据

flink cdc捕获postgresql变化数据

环境准备

  • flink 1.11
  • postgresql数据库,版本要大于9.4,postgresql 9.5以下版本不支持upsert。
  • flink jar包
    1.flink-connector-postgres-cdc.jar
    2.flink-connector-jdbc_2.11-1.11.2.jar
    点击下载 提取码:3p16

flink cdc功能测试

  1. 修改postgresql配置文件
vi postgresql.conf

修改 wal_level = logical ,重启数据库,使配置生效

  • 注意:wal_level = logical源表的数据修改时,默认的逻辑复制流只包含历史记录的primary key,如果需要输出更新记录的历史记录的所有字段,需要在表级别修改参数:ALTER TABLE tableName REPLICA IDENTITY FULL; 这样才能捕获到源表所有字段更新后的值
  1. 将jar包导入flink lib目录
  2. 启动flink sql客户端
bin/sql-client.sh embedded

4.在postgre中创建测试表

create table pg_cdc_source(id int,name varchar);

5.flink sql客户端中创建测试表

CREATE TABLE flink_cdc_source (
  id INT,
  name STRING
) WITH (
  'connector' = 'postgres-cdc',
  'hostname' = '10.***.***.***',
  'port' = '5432',
  'database-name' = 'postgres',
  'schema-name' = 'public',
  'username' = 'postgres',
  'password' = '123456',
  'table-name' = 'pg_cdc_source',
  'decoding.plugin.name' = 'pgoutput'
);

6.往pg_cdc_source插入一条数据,同时flink sql客户端中查看结果

insert into pg_cdc_source values(1,'tom');

在这里插入图片描述
如果出现上述错误,表示没识别到flink-connector-postgres-cdc.jar,如果确定已经导入,则重启一下flink.

我们查看flink中的表:select * from flink_cdc_source;
在这里插入图片描述
可以看到flink已经捕获到这条数据。

  • 注意:
    flink cdc的建表脚本和flink通过jdbc连接数据库的脚本是不一样的,flink jdbc连接jdbc的sql脚本如下:
CREATE TABLE flink_cdc_sink (
  id INT,
  name STRING,
  PRIMARY KEY (id) NOT ENFORCED
) WITH (
  'connector' = 'jdbc',
  'url' = 'jdbc:postgresql://10.**.**.**:5432/test',
  'username' = 'gpadmin',
  'password' = '123456',
  'table-name' = 'tbl'
);

WITH后的参数是不一样的,要注意一下,不要搞混了。

另外,flink cdc的任务在UI上是一直为running状态的。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41197407/article/details/112655218