Greenplum数据导入系列 -- (二)数据库实时同步

2020-01-14 16:44:16 浏览数 (1)

说明

本文描述问题及解决方法同样适用于 腾讯云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步:

  1. 下载并搭建Kafka服务(如果是云环境,最好使用云上的kafka,省去搭建和维护的成本,比如腾讯云CKafka)
  2. 下载并搭建maxwell服务,修改配置使其能够连接MySQL并能向kafka写入数据
  3. 下载并搭建bireme服务,修改配置使其能读取kafka的数据并能向Greenplum写入数据

前置

  1. 运行上述软件需要先安装java yum -y install java-1.8.0-openjdk.x86_64
  2. 安装jsvc yum -y install jsvc
  3. 确保机器对MySQL,Kafka,Greenplum网络连通

Kafka

为了简便,此处使用腾讯云CKafka作为例子

1. 腾讯云CKafka地址

2. 创建一个topic

image.pngimage.png

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的数据库

image.pngimage.png

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

总结

该方案主要使用开源组件,门槛较低,仅需修改配置便可运行,不过需要用户自己维护开源组件的运行,后续将介绍一些

0 人点赞