cdc环境搭建

1,359 阅读3分钟

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
    
  • 启动pgsql

    cd /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';
    

    al9wtO.png

  • 通过GIT安装wal2json

    git 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    
    
  • 验证: 监听slot

    pg_recvlogical -U postgres -d ssta_data_check_0 --slot x_l --start -o pretty-print=1 -f -     
    
  • 在指定数据库进行测试数据插入

    alATvF.png

  • ssh窗口查看监听slot打印情况

    alEAUI.png

  • 删除测试的slot

    pg_recvlogical -d postgres --slot x_l --drop-slot
    
  • 安装测试完毕

2. CDC安装

  • pgsql wal2json 插件需要提前安装配置好

  • CDC环境包括 pgsql --> wal2json --> debezium --> zookeeper --> kafka

  • 下载对应版本kafka

  • 下载debezium 并且解压缩至kafka/libs

    wget 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 status
    
  • kafka 需要分别修改两个配置文件 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:2181
    

  • connect-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连接,建议使用工具 postmanhttp client工具

  • post请求,访问your ip:20001/connectors,并且携带debezium 连接器配置参数,截图如下:

    awcict.png

  • 创建完毕之后可以使用 get请求 your Ip:20001/connectors直接查询

  • 验证方式: 数据库test 随便找一张表添加测试数据,然后查看kafka topic 确认对应的topic 是否创建

    awffn1.png

  • ./kafka-topics.sh --list --zookeeper 127.0.0.1:2181 查看所余的topic

    awhC9g.png
    awhC9g.png
  • END