cdc环境搭建
一. 技术选型,背景
1. 什么是cdc?
❝数据同步市面上常见的方案基于实现方式的不同主要分为两种:
❞
❝
❞ETL:(Extract Transform Load)着眼于状态本身,用定时批量轮询的方式拉取状态本身.
❝
❞CDC:(Changing Data Capture)则着眼于变更事件,以流式的方式持续收集状态变化事件(变更).
2. 为什么选择cdc?
❝较
❞ETL时效性更加容易控制.
❝通过监听数据库的方式比代码维护结构,设计更加合理.
❞
❝省却代码控制时可能出现的分布式事务.
❞
❝降低数据库读写压力.
❞
二. 版本
kafka: 「2.12-2.4.0」zookeeper: 「3.4.1.0」pgsql:10+
三. 正式安装
1. pgsql安装
pg-sql安装需要添加如下插件:yum install postgresql10-server postgresql10-contrib postgresql10-devel启动
pgsqlcd /usr/pgsql-10/bin ./pg_ctl start -D /var/lib/pgsql/10/data通过
sql查询pgsql配置文件位置.select name,setting from pg_settings where category='File Locations';通过
GIT安装wal2jsongit clone https://github.com/eulerto/wal2json -b master --single-branch cd wal2json make && make install添加修改配置文件
pg_hba.conf,使得对用账号可以本地/远程访问数据库,添加配置如下:local all all trust host all all 127.0.0.1/32 trust修改
postgresql.conf文件,添加相关wal2json配置及slot配置,添加配置如下# 日志输出 格式化插件修改为 wal2json shared_preload_libraries = 'wal2json' wal_level = logical # 如下两个配置视需要开启的插槽 修改 如 五个数据库 需要开启五个 max_wal_senders = 4 max_replication_slots = 4重启
pgsql数据库./pg_ctl restart -D /var/lib/pgsql/10/data验证: 创建
slot,参数解释(-U: 指定数据库用户-d 指定数据库--slot 指定创建slot名称-P 指定格式化输出插件)(参数与参数之间只能间隔一个空格,要不然会报错)(数据库启动端口修改后需要增加参数-p |port|)pg_recvlogical -U postgres -d ssta_data_check_0 --slot x_l --create-slot -P wal2json验证: 监听
slotpg_recvlogical -U postgres -d ssta_data_check_0 --slot x_l --start -o pretty-print=1 -f -在指定数据库进行测试数据插入
ssh窗口查看监听slot打印情况删除测试的
slotpg_recvlogical -d postgres --slot x_l --drop-slot安装测试「完毕」
2. CDC安装
pgsqlwal2json插件需要提前安装配置好CDC环境包括pgsql-->wal2json-->debezium-->zookeeper-->kafka下载对应版本
kafka下载
debezium并且解压缩至kafka/libswget https://repo1.maven.org/maven2/io/debezium/debezium-connector-postgres/0.8.3.Final/debezium-connector-postgres-0.8.3.Final-plugin.tar.gz tar -zxvf debezium-connector-postgres-0.8.3.Final-plugin.tar.gz下载对应版本
zookeeper查看
zookeeper配置文件 并修改(主要针对端接口和日志/数据输出路径进行修改,可遵循默认配置)启动
# 启动 ./zkServer.sh start # 查看zookeeper 状态 ./zkServer.sh statuskafka需要分别修改两个配置文件config/server.properties「kafka服务端配配置文件」config/connect-distributed.properties「kafka分布式连接器模式配置文件」server.properties需要修改如下:listeners=PLAINTEXT://your Ip:9092 advertised.listeners=PLAINTEXT://your Ip:9092 zookeeper.connect=上面的那个zookeeper Ip:2181connect-distributed.properties需要修改如下:bootstrap.servers=your Ip:9092分别启动
kafka服务端 和kafka连接器cd /bin # 测试启动是否报错 无报错则 ctrl + c 退出 ./kafka-server-start.sh ../config/server.properties # 后台启动 ./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 & # 测试启动 ./connect-distributed.sh ../config/connect-distributed.properties # 后台启动 ./connect-distributed.sh ../config/connect-distributed.properties 1>/dev/null 2>&1 & # 测试 curl 127.0.0.1:20001 # 返回如下 {"version":"2.4.0","commit":"77a89fcf8d7fa018","kafka_cluster_id":"YjaW30CDQN2NIaohFWAkEg"}创建
debezium连接,建议使用工具postman等http client工具post请求,访问your ip:20001/connectors,并且携带debezium连接器配置参数,截图如下:创建完毕之后可以使用
get请求your Ip:20001/connectors直接查询验证方式: 数据库
test随便找一张表添加测试数据,然后查看kafkatopic确认对应的topic是否创建./kafka-topics.sh --list --zookeeper 127.0.0.1:2181查看所余的topic
awhC9g.png END




