CDC方案学习

@

CDC PostgreSQL

1、安装PostgreSQL 10.0+

2、更改配置文件postgresql.conf

# 更改wal日志方式为logical
wal_level = logical #其余选项为 minimal, replica, or logical

# 更改solts最大数量(默认值为10),flink-cdc默认一张表占用一个slots
max_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

ps:wal_level是必须更改的,其它参数选着性更改,如果同步表数量超过10张建议修改为合适的值

2、基于postgresql复制流权限

'user'		指代具体的用户
'pwd'		指代具体的用户密码
'tables'	具体的表名
-- pg新建用户及其密码
CREATE USER 'user' WITH PASSWORD 'pwd';
-- 用户复制流权限
ALTER ROLE user replication;
-- 用户登录数据库权限
grant CONNECT ON DATABASE test to user;
-- 把当前库public下所有表查询权限赋给用户
GRANT SELECT ON ALL TABLES IN SCHEMA public TO user;

3、发布订阅表

-- 设置发布为true
update pg_publication set puballtables=true where pubname is not null;
-- 把所有表进行发布
CREATE PUBLICATION dbz_publication FOR ALL TABLES;
-- 查询哪些表已经发布
select * from pg_publication_tables;

4、更改表的复制标识包含更新和删除的值(否则不能更新表数据和删除)

-- 更改复制标识包含更新和删除之前值
ALTER TABLE 'tables' REPLICA IDENTITY FULL;
-- 查看复制标识(为f标识说明设置成功)
select relreplident from pg_class where relname='tables';

4.1 推荐使用 修改pg_hba.conf文件

基于所有表复制删除标识

# IPv4 local connections:
 
host    all                 all              0.0.0.0/0               md5
 
host    replication         all              0.0.0.0/0               md5

5、其余常用命令

-- 设置发布开关
update pg_publication set puballtables=true where pubname is not null;
-- 把所有表进行发布
CREATE PUBLICATION dbz_publication FOR ALL TABLES;
-- 查询哪些表已经发布
select * from pg_publication_tables;
-- 给表查询权限
grant select on TABLE 'tables' to 'user';
-- 给用户读写权限
grant select,insert,update,delete ON  ALL TABLES IN SCHEMA public to 'user';
-- 把当前库所有表查询权限赋给用户
GRANT SELECT ON ALL TABLES IN SCHEMA public TO 'user';
-- 把当前库以后新建的表查询权限赋给用户
alter default privileges in schema public grant select on tables to 'user';
-- 查看solt使用情况
SELECT * FROM pg_replication_slots;
-- 删除solt(xxx_slot指代具体的插槽)
SELECT pg_drop_replication_slot('xxx_slot');
-- 查询用户当前连接数
select usename, count(*) from pg_stat_activity group by usename order by count(*) desc;
-- 设置用户最大连接数
alter role odps_etl connection limit 200;
-- 查询用户和密码
SELECT rolname,rolpassword FROM pg_authid;

6、注意事项

6.1、用户权限

用来同步的用户至少具有 REPLICATION、LOGIN、SCHEMA、DATABASE、SELECT 权限

CREATE ROLE 'user' REPLICATION LOGIN; 
GRANT USAGE ON SCHEMA schema_name TO 'user';
GRANT USAGE ON DATABASE schema_name TO 'user';
GRANT SELECT ON scheam_name.table_name, scheam_name.table_name TO 'user';

6.2、CDC

pgoutput是 PostgreSQL 10+ 中的标准逻辑解码输出插件。

6.3、插件

参考文章

Flink-cdc实时读postgresql

Flink PostgreSQL CDC配置和常见问题

[Debezium系列之:使用Debezium接入PostgreSQL数据库数据到Kafka集群的详细技术文档_debezium集群](https://blog.csdn.net/zhengzaifeidelushang/article/details/126651507#:~:text=1 1.配置 PostgreSQL 服务器 2 2.设置权限,3 3.配置 PostgreSQL 以允许使用 Debezium 连接器主机进行复制)

整合flink-cdc实现实时读postgrasql

PostgreSQL教程--逻辑结构:实例、数据库、schema、表之间的关系_数据库实例和schema

Debezium+Kafka

kafka connect 创建、删除连接器connector

kafka connector 使用总结以及自定义connector开发

[实时数据同步利器debezium教程](https://blog.csdn.net/sinat_39809957/article/details/121116398#:~:text=实时数据同步利器debezium教程 1 1 debezium概述 Debezium是一个开源项目,为捕获数据更改 (change data capture%2CCDC)提供了一个低延迟的流式处理平台。,... 5 5 debezium mysql插件使用 下面我们构造一个实际的使用实例来说明debezium mysql的使用方法。 )

大白话讲解 :debezium 搭建的使用

posted @ 2023-06-09 22:41  李好秀  阅读(43)  评论(0编辑  收藏  举报