使用tunnel同步PG数据到kafka
admin
2023-03-02 09:22:14
0次

tunnel同步PG数据到kafka

来自哈罗单车开源的组件。支持同步PG数据到kafka或者ES。


 

https://github.com/hellobike/tunnel

 

tunnel整体的部署比较简单的

需要事先部署好zk和kafka(我下面演示的是单节点的zk和kafka)

 

节点部署关系:

192.168.2.4   部署zk、kafka、pg10运行在1921端口

192.168.2.189 部署tunnel

 

 

确保已开启PG的逻辑复制

wal_level = 'logical';

max_replication_slots = 20

注意这个设置要重启PG进程的

 

然后,创建测试库表和同步用的账号

CREATE DATABASE test_database;

\c test_database

create table test_1 (id int primary key , name char(40));

create table test_2 (id int primary key , name char(40));

 

CREATE ROLE test_rep LOGIN ENCRYPTED PASSWORD 'xxxx' REPLICATION;

GRANT CONNECT ON DATABASE test_database to test_rep;

 

vim pg_hba.conf 增加2行配置:

host    all                   test_rep        192.168.2.0/24         md5

host    replication     test_rep        192.168.2.0/24         md5

然后 reload 下PG

 

到192.168.2.189 机器上去 编译tunnel:

注意: tunnel的启动需要事先安装好oracle jdk 1.8

 

git clone https://github.com/hellobike/tunnel

cd tunnel

mvn clean package -Dmaven.test.skip=true

cd target

unzip AppTunnelService.zip

cd AppTunnelService

 

vim conf/test.yml 内容如下:

tunnel_subscribe_config:

  pg_dump_path: '/usr/local/pgsql-10.10/bin/pg_dump'

  subscribes:

  - slotName: slot_for_test

    pgConnConf:

      host: 192.168.2.4

      port: 1921

      database: test_database

      user: test_rep

      password: xxxx

    rules:

    - {table: test_1, pks: ['id'], topic: test_1_logs}

    - {table: test_2, pks: ['id'], topic: test_2_logs}

    kafkaConf:

      addrs:

      - 192.168.2.4:9092

tunnel_zookeeper_address: 192.168.2.4:2181

 

前台启动:

java -server -classpath conf/*:lib/* com.hellobike.base.tunnel.TunnelLauncher -u false -c cfg.properties -p 7788     # 暴露prometheus metric在7788端口(配置监控不是这里的重点,也很简单,暂时先跳过)


然后,我们再在PG10上面的test_database的2张表随便造些数据,然后可以看到kafka里面已经有数据了(下图是通过kafkamanager和 kafka-eagle的结果)。

使用tunnel同步PG数据到kafka



使用tunnel同步PG数据到kafka



格式化下,数据就是这样的:

UPDATE的记录的样子:

{

         "dataList": [{

                   "dataType": "integer",

                   "name": "id",

                   "value": "1111"

         }, {

                   "dataType": "character",

                   "name": "name",

                   "value": "大狗蛋 "

         }],

         "eventType": "UPDATE",

         "lsn": 10503246616,

         "schema": "public",

         "table": "test_1"

}

 

DELETE的记录的样子:

{

         "dataList": [{

                   "dataType": "integer",

                   "name": "id",

                   "value": "3"

         }],

         "eventType": "DELETE",

         "lsn": 10503247064,

         "schema": "public",

         "table": "test_1"

}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...