说明
本文描述问题及解决方法同样适用于 腾讯云Snova云数仓。
背景
Greenplum作为数据仓库的计算引擎,其数据来源多是业务数据,其中以MySQL为主。那如何将数据从MySQL同步到Greenplum中?如果是离线同步,比如每小时,每天,可以参考前一篇文章 Greenplum数据导入系列 -- (一)DataX,那如果需要实时同步呢,最常见的就是解析MySQL的binlog然后写入到Greenplum中,本文就描述了一种实现方法。
方法
本文介绍的方法是采用 maxwell Kafka bireme,以下简单做一下介绍:
maxwell:maxwell能实时解析MySQL的binlog,并输出json格式的数据发送到Kafka(还支持其它的消息中间件),具体参见maxwell官网
Kafka: 一种消息中间件,在该方案中主要用于消息中转,具体参见Kafka官网
bireme:支持Greenplum的数据增量同步工具,在写入Greenplum的过程中,由于采用Copy模式,所以性能较高,具体参见bireme官网
使用该方法,总体流程就是如下3步:
- 下载并搭建Kafka服务(如果是云环境,最好使用云上的kafka,省去搭建和维护的成本,比如腾讯云CKafka)
- 下载并搭建maxwell服务,修改配置使其能够连接MySQL并能向kafka写入数据
- 下载并搭建bireme服务,修改配置使其能读取kafka的数据并能向Greenplum写入数据
前置
- 运行上述软件需要先安装java
yum -y install java-1.8.0-openjdk.x86_64
- 安装jsvc
yum -y install jsvc
- 确保机器对MySQL,Kafka,Greenplum网络连通
Kafka
为了简便,此处使用腾讯云CKafka作为例子
1. 腾讯云CKafka地址
2. 创建一个topic
maxwell
1. maxwell下载地址,选取最新版本即可
2. 解压之后,需要修改配置文件
cp config.properties.example config.properties
至少修改以下项目
代码语言:txt复制# kafka配置
kafka_topic=maxwell
kafka.bootstrap.servers=localhost:9092
# MySQL配置
host=localhost
port=3306
user=maxwell
password=maxwell
3. 启动maxwell
bin/maxwell --config config.properties
4. 需要注意,maxwell启动后,会在MySQL中创建一个maxwell的数据库
bireme
1. bireme下载地址,选取最新版本即可
2. 解压后,修改配置文件etc/config.properties
代码语言:txt复制# target database where the data will sync into.
target.url = jdbc:postgresql://127.0.0.1:5432/postgres
target.user = postgres
target.passwd = postgres
# data source name list, separated by comma.
data_source = maxwell1
# data source "mysql1" type
maxwell1.type = maxwell
# kafka server which maxwell write binlog into.
maxwell1.kafka.server = 127.0.0.1:9092
# kafka topic which maxwell write binlog into.
maxwell1.kafka.topic = topic_name1
# kafka groupid used for consumer.
maxwell1.kafka.groupid = bireme
3. 修改配置etc/maxwell1.properties
需要注意 maxwell1.properties中的maxwell1就是etc/config.properties中配置的data_source
以下表名MySQL中的test库的tb1和Greeplum(数据库在配置中已经指定了)中的public schema下的tb1是对应的,需要同步数据
代码语言:txt复制test.tb1 = public.tb1
4. 启动bireme, bin/bireme start
注意:启动bireme,需设置JAVA_HOME
总结
该方案主要使用开源组件,门槛较低,仅需修改配置便可运行,不过需要用户自己维护开源组件的运行,后续将介绍一些