1、介绍

Bireme 是一个 Greenplum / HashData 数据仓库的增量同步工具。目前支持 MySQL、PostgreSQL 和 MongoDB 数据源
官方介绍文档:https://github.com/HashDataInc/bireme/blob/master/README_zh-cn.md

1、数据流


Bireme 采用 DELETE + COPY 的方式,将数据源的修改记录同步到 Greenplum / HashData ,相较于INSERT + UPDATE + DELETE的方式,COPY 方式速度更快,性能更优

2、数据源

2.1、Maxwell + Kafka 是 bireme 目前支持的一种数据源类型,架构如下图:

Maxwell 是一个 MySQL binlog 的读取工具,它可以实时读取 MySQL 的 binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka
 
2.2、Debezium + Kafka 是 bireme 支持的另外一种数据源类型,架构如下图:

Debezium 是一个CDC工具,可以将数据库的增删改转换为事件流,并把这些修改发送给 Kafka

3、工作原理

Bireme 从数据源读取数据 (Record),将其转化为内部格式 (Row) 并缓存,当缓存数据达到一定量,将这些数据合并为一个任务 (Task),每个任务包含两个集合,delete 集合与insert 集合,最后把这些数据更新到目标数据库。
每个数据源可以有多个 pipeline,对于 maxwell,每个 Kafka partition 对应一个 pipeline;对于 debezium,每个 Kafka topic 对应一个 pipeline

4、本文搭建实例图形

2、配置相关数据源、目标数据源和java环境

1、mysql数据源

1、数据库,create database syncdb1;
2、用户权限,需要拥有SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT,此处使用root权限
3、同步的表(切换到syncdb1数据库),create table tb1(a int, b char(10), primary key(a));

2、pgsql目的数据库

1、用户,create user syncdb with password 'syncdb';
2、数据库,create database syncdb with owner 'syncdb';
3、同步的表(使用syncdb用户切换到syncdb数据库),create table tb1(a int, b char(10), primary key(a));

3、java环境的安装

1、下载二进制安装包:jdk-8u101-linux-x64.tar.gz
2、解压二进制包并做软链接:tar xf jdk-8u101-linux-x64.tar.gz && ln -s /data/jdk1.8.0_101 /usr/java
3、配置路径和java环境变量:vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
4、source生效:source  /etc/profile.d/java.sh
5、安装jsvc,yum install jsvc

3、kafka的安装和启动配置

1、下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/
2、kafka官方文档:http://kafka.apache.org/
3、解压缩:tar xf kafka_2.11-2.0.0.tgz && cd kafka_2.11-2.0.0
4、ZooKeeper

启动,bin/zookeeper-server-start.sh config/zookeeper.properties
关闭,bin/zookeeper-server-stop.sh config/zookeeper.properties

5、Kafka server

启动,bin/kafka-server-start.sh config/server.properties
启动,bin/kafka-server-stop.sh config/server.properties

6、Topic(不是本实验必须的,作为学习使用)

创建,bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic world
查询,bin/kafka-topics.sh --list --zookeeper localhost:2181
删除,bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic world

7、Producer(不是本实验必须的,作为学习使用)

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello
>jiaming
>

8、Consumer(不是本实验必须的,作为学习使用)

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello
jiaming

4、debezium的安装和启动配置

下载debezium的mysql连接器
1、下载地址:https://debezium.io/docs/install/
2、debezium官方文档:https://debezium.io/docs/tutorial/
3、解压缩:tar xf debezium-connector-mysql-0.8.1.Final-plugin.tar.gz
4、解压出来的jar包全部拷贝到kafka libs目录下,cp debezium-connector-mysql/.jar kafka2.11-2.0.0/libs/
5、添加配置文件(用于连接mysql数据源,对应参数可参考官方介绍:https://debezium.io/docs/connectors/mysql/#example-configuration )
cd kafka_2.11-2.0.0 && vim mysql.properties
note:debezium的database.server.name一定要和bireme的data_source保持一致

name=inventory-connector
connector.class=io.debezium.connector.mysql.MySqlConnector
database.hostname=118.190.209.102
database.port=5700
database.user=root
database.password=123456
database.server.id=129129
database.server.name=debezium1  # debezium的database.server.name一定要和bireme的data_source保持一致
database.whitelist=syncdb1  # 同步的数据库列表
database.history.kafka.bootstrap.servers=localhost:9092
database.history.kafka.topic=dbhistory.debezium1
include.schema.changes=true

6、以独立模式启动kafka connect,此时debezium会对数据库中的每一个表创建一个topic,消费相应的topic,即可获取binlog解析信息

cd kafka_2.11-2.0.0
bin/connect-standalone.sh config/connect-standalone.properties mysql.properties

7、查看topic列表

cd kafka_2.11-2.0.0
bin/kafka-topics.sh --list --zookeeper localhost:2181

debezium1.syncdb1.tb1,每个数据源同步表会生成一个topic
debezium1,记录ddl操作
dbhistory.debezium1,记录对应ddl操作和position位点信息

5、bireme的安装和启动配置

1、下载地址:https://github.com/HashDataInc/bireme/releases
2、bireme官方文档:https://github.com/HashDataInc/bireme/blob/master/README_zh-cn.md
3、解压缩:tar xf bireme-1.0.0.tar.gz && cd bireme-1.0.0
4、修改配置文件,vim etc/config.properties
note:debezium的database.server.name一定要和bireme的data_source保持一致

# target database where the data will sync into.
target.url = jdbc:postgresql://118.190.209.102:5432/syncdb
target.user = syncdb
target.passwd = syncdb# data source name list, separated by comma.
data_source = debezium1  # debezium的database.server.name一定要和bireme的data_source保持一致# data source "debezium1"
debezium1.type = debezium
# kafka server which debezium write into.
debezium1.kafka.server = 127.0.0.1:9092
# kafka groupid used for consumer.
debezium1.kafka.groupid = bireme
debezium1.kafka.namespace = debezium1# set the IP address for bireme state server.
state.server.addr = 0.0.0.0
# set the port for bireme state server.
state.server.port = 8080

5、修改配置文件,vim etc/debezium1.properties(表映射配置
note:debezium1.properties的debezium1一定要和bireme的data_source保持一致

# source table full name = target table full name
syncdb1.tb1 = public.tb1

6、启动bireme,bin/bireme start
7、监控,http://192.168.1.129:8080/pretty (state.server.addr:state.server.port)

6、测试

1、mysql数据源

insert into tb1 select 1,'a';
insert into tb1 select 2,'b';

2、pgsql目标数据库

syncdb=# select * from tb1;a |     b
---+------------1 | a         2 | b
(2 rows)

7、优势和存在问题

1、优势

1、可以实现多个库表的汇总功能,syncdb1.tb1/syncdb2.tb1 可以汇总到pgsql的一张表tb1中
2、中间使用kafka消息队列,对于大数据量性能方面提升较好
3、不存在数据源库***问题,位点信息存放在kafka中的topic中
4、第一次启动debezium,会生成一个数据源数据库的snapshot,然后之后基于binlog的解析,这样避免了第一次同步数据源数据库到目标数据库的一份全量数据

2、存在问题
待测试补充

转载于:https://blog.51cto.com/11257187/2153817

bireme数据源同步工具--debezium+kafka+bireme相关推荐

  1. rds_dbsync数据源同步工具

    一.介绍 dbsync 项目目标是围绕 PostgreSQL Greenplum ,实现易用的数据的互迁功能 github地址:https://github.com/aliyun/rds_dbsync ...

  2. 实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)

    数据库实时增量同步工具-CDC(Change Data Capture) Canal 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机 房的需求 ...

  3. 【硬刚大数据】大数据同步工具之FlinkCDC/Canal/Debezium对比

    欢迎关注博客主页:微信搜:import_bigdata,大数据领域硬核原创作者_王知无(import_bigdata)_CSDN博客 欢迎点赞.收藏.留言 ,欢迎留言交流! 本文由[王知无]原创,首发 ...

  4. 异构数据源离线同步工具之DataX的安装部署

    异构数据源离线同步工具之DataX的安装部署

  5. 数据同步工具的研究(实时)

    数据同步工具的研究(实时同步): FlinkCDC.Canal.Maxwell.Debezium --2023年01月17日 --Yahui Di 1. 常用CDC方案比较 2. FlinkCDC F ...

  6. 这款 MySQL、Oracle、HDFS 数据同步工具,有点牛逼!

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  7. ETL的数据同步工具调研(持续更新中)

    扯白了,数据同步工具就是"导数据 "的 名称 社区响应 国内使用情况(以前程无忧为参考) SQOOP 更新缓慢,对于hbase2.x以上版本使用时需要老版本的jar包 9页 Dat ...

  8. etl数据抽取工具_数据同步工具ETL、ELT傻傻分不清楚?3分钟看懂两者区别

    什么是数据同步工具(ETL.ELT) 数据同步工具ETL或者ELT的作用是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决 ...

  9. mysql binlog 大数据_后起之秀 | MySQL Binlog增量同步工具go-mysql-transfer实现详解

    一. 概述 工作需要研究了下阿里开源的MySQL Binlog增量订阅消费组件canal,其功能强大.运行稳定,但是有些方面不是太符合需求,主要有如下三点: 需要自己编写客户端来消费canal解析到的 ...

最新文章

  1. 作为一只Python爬虫:如何破解滑动验证码
  2. 性能超过人类炼丹师,AutoGluon 低调开源
  3. 页面字符太长用.....表示
  4. C语言函数集(十六)
  5. 手机存储sqlite还是mysql_手机存储 和sd 路径
  6. js正则表达式语法大全_一条正则表达式闹的乌龙
  7. 2021暑假每日一题 【week7 完结】
  8. MooTools Class 使用、继承详解
  9. kinect数据读取
  10. 浮动元素与兄弟之间的关系 速记 1211
  11. 疑似荣耀30S将于今日正式官宣:首发搭载全新麒麟820芯片
  12. 天猫苛费猛如虎,天猫抽检潜“坑爹”
  13. 构建wifi破解所需的密码库文件
  14. mc服务器地图无限大吗,我的世界:4个小秘密,没想到啊,地图的范围这么大!...
  15. Navicat连接本地数据库10038,1251
  16. 蓝牙配对连接HCI log学习
  17. [Hi3751V350][Android9.0] 调试笔记 --- 添加并设置默认系统字库
  18. 企查查在哪查实缴_如何查询一家企业的注册资金是实缴的还是认缴的?
  19. 第三方登陆:微信官方登陆
  20. Java 命名规范---阿里Java开发手册

热门文章

  1. jQuery EasyUI DataGrid - 格式化列(formatter )
  2. 安装LINUX后要怎么找回WIN7启动项?
  3. Swift Package Manager 库制作
  4. css伪类元素及选择器
  5. php人员权限管理(RBAC)
  6. ****题(alb)
  7. Stixel_World(single)学习笔记
  8. hihoCoder week3 KMP算法
  9. 第一讲 网络安全概述笔记
  10. [bzoj1305][CQOI2009]dance跳舞