mysql增量同步kafka_mysql增量同步到greenplum

本文介绍了通过Maxwell解析MySQL binlog,借助Kafka作为消息中间件,使用Bireme实现数据增量同步到Greenplum的流程。详细步骤包括Kafka和Maxwell的配置、Bireme的使用,以及全量同步的建议工具Dbswitch。
摘要由CSDN通过智能技术生成

采用工具:maxwell+kafka+bireme

maxwell:maxwell能实时解析mysql的binlog,并输出json格式的数据发送到kafka(还支持其它的消息中间件),具体参见:

kafka: 一种消息中间件,在该方案中主要用于消息中转,具体参见kafka官网

bireme:支持greenplum的数据增量同步工具,在写入greenplum的过程中,由于采用copy模式,所以性能较高,具体参见bireme官网

大致原理就是:利用maxwell把mysql binlog解析成json,然后用kafka创建topic,然后用bireme消费,从而达到增量,增量的前提是先把数据全量同步一次,然后再增量。

全量同步初始化个人推荐dbswitch工具,个人测试使用体验最佳,可以自动创建表结构,同步速度也很快。

操作步骤:

1.下载并搭建kafka服务

2.下载并搭建maxwell服务,修改配置使其能够连接mysql并能向kafka写入数据

3.下载并搭建bireme服务,修改配置使其能读取kafka的数据并能向greenplum写入数据

kafka:

(1)下载安装:

wget http://mirrors.hust.edu.cn/apache/kafka/2.5.0/kafka_2.12-2.5.0.tgz

tar -xzf kafka_2.12-2.5.0.tgz -c /usr/local

(2)配置server.properties,我的简单配置如下:

[root@szwpldb1080 config]# cat server.properties |grep -ve '^#|^$'

broker.id=0

num.network.threads=3

num.io.threads=8

socket.send.buffer.bytes=102400

socket.receive.buffer.bytes=102400

socket.request.max.bytes=104857600

log.dirs=/tmp/kafka-logs

num.partitions=1

num.recovery.threads.per.data.dir=1

offsets.topic.replication.factor=1

transaction.state.log.replication.factor=1

transaction.state.log.min.isr=1

log.retention.hours=16

log.cleanup.policy=delete

log.segment.bytes=1073741824

log.retention.check.interval.ms=3000

delete.topic.enable = true

zookeeper.connect=localhost:2181

zookeeper.connection.timeout.ms=6000

delete.topic.enable=true

group.initial.rebalance.delay.ms=0

advertised.host.name=172.18.1.150

(3)制作kafka启停脚本(提前安装好java):

#!/usr/bin/env bash

# chkconfig: 2345 20 80

#description: start and stop server

zoop_home=/usr/local/kafka_2.12-2.5.0/bin

java_home=/usr/java/jdk1.8.0_221/

path=$java_home/bin:$path

classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar

svr_name=kafka

case $1 in

start)

echo "starting $zoop_home/$svr_name ..."

$zoop_home/kafka-server-start.sh /usr/local/kafka_2.12-2.5.0/config/server.properties > /tmp/kafka.logs.out&

;;

stop)

echo "stopping $pro_home/$svr_name ..."

ps -ef|grep *.$svr_name* |grep -v grep |awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -

;;

restart)

"$0" stop

sleep 3

"$0" start

;;

status)

ps -ef|grep *.$svr_name*

;;

logs)

tail -f /tmp/zookeeper.logs.out

;;

*)

echo "example: server-$svr_name [start|stop|restart|status|logs]" ;;

esac

添加到 /etc/rc.d/init.d ,然后就可以直接service kafka xxx来管理,或者添加到systemd下面,确保服务正常启动安装zookerper,然后启动kafka。

我的zookeeper简单配置如下:

[root@szwpldb1080 config]# cat zookeeper.properties |grep -ev '^$|^#'

datadir=/tmp/zookeeper

clientport=2181

maxclientcnxns=0

zookeeper启停脚本

#!/usr/bin/env bash

# chkconfig: 2345 20 80

#description: start and stop server

zoop_home=/usr/local/kafka_2.12-2.5.0/bin

java_home=/usr/java/jdk1.8.0_221/

path=$java_home/bin:$path

classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar

svr_name=zookeeper

case $1 in

start)

echo "starting $zoop_home/$svr_name ..."

$zoop_home/zookeeper-server-start.sh /usr/local/kafka_2.12-2.5.0/config/zookeeper.properties > /tmp/zookeeper.logs.out&

;;

stop)

echo "stopping $pro_home/$svr_name ..."

ps -ef|grep *.$svr_name* |grep -v grep |awk '{print $2}' | sed -e "s/^/kill -9 /g" | sh -

;;

restart)

"$0" stop

sleep 3

"$0" start

;;

status)

ps -ef|grep *.$svr_name*

;;

logs)

tail -f /tmp/zookeeper.logs.out

;;

*)

echo "example: server-$svr_name [start|stop|restart|status|logs]" ;;

esac

(4)检查状态:

[root@szwpldb1080 config]# jps

1762 kafka

18521 quorumpeermain

30383 jps

maxwell:

(1)docker镜像下载

docker pull zendesk/maxwell

(2)在源端mysql建好用户设置好权限,测试maxwell:

docker run -ti --rm zendesk/maxwell bin/maxwell --user='xxxx' --password='xxxx' --host='x.x.x.x' --producer=stdout

看到日志输出正常,可以放后台运行:

docker run -d --rm zendesk/maxwell bin/maxwell --user='xx' \

--password='xx' --host='x.x.x.x' --port=3306\

--producer=kafka --kafka.bootstrap.servers='x.x.x.x:9092'\

--kafka_topic=syncdb --log_level=debug --output_ddl

然后创建kafka topic:

bin/kafka-topics.sh --create --topic syncdb --zookeeper localhost:2181 --partitions 1 --replication-factor 2

topic名字与maxwell创建的topic一致,并且由于maxwell可以解析所有binlog,但是bireme工具只能同步dml,因此没有加 --output_ddl

具体maxwell参数用法可以参考:

检查kafka消费情况:

[root@szwpldb1080 bin]# ./kafka-topics.sh --zookeeper localhost:2181 --describe --topic syncdb

topic:syncdb partitioncount:1 replicationfactor:1 configs:

topic: syncdb partition: 0 leader: 0 replicas: 0 isr: 0

[root@szwpldb1080 bin]#./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic syncdb --from-beginning

看到kafka能接收maxwell产生的json文件,表示没问题。

bireme

安装配置都很简单,此处略过。

主要是修改以下2个配置文件。

config.properties

maxwell1.properties

然后监控 http://x.x.x.x:8080或者监控bireme日志就可以了。

总结:

只能同步dml语句,无法处理ddl,对比几款开源的工具已经同步方式,我觉得我这种是最舒服的。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

Greenplum 集群之间同步数据方法及性能.....................................................................................1 1 概述.................................................................................................................................................2 2 相同集群相同数据库不同 SCHEMA 之间同步数据....................................................................2 2.1 查看原始表的大小行数与结构......................................................................................... 2 2.2 同步语句..............................................................................................................................2 2.3 查看 cpu 与内存的使用情况..............................................................................................3 2.3.1 查看 Master CPU 与内存使用情况.........................................................................3 2.3.2 查看数据节点的 CPU 使用情况..............................................................................3 2.3.3 查看数据节点的内存与磁盘使用情况..................................................................6 2.4 查看耗时与表的大小..........................................................................................................7 3 相同集群不同数据库之间同步数据.............................................................................................8 3.1 使用 pg_dum 方式同步数据..............................................................................................8 3.1.1 查看原始表的信息...................................................................................................8 3.1.2 把数据下载到磁盘...................................................................................................9 3.1.2.1 下载数据语句............................................................................................... 9 3.1.2.2 查看 Master 节点详细信息.........................................................................9 3.1.3 把数据导入到数据库中........................................................................................ 10 3.1.3.1 导入数据库语句......................................................................................... 10 3.1.3.2 查看 Master 节点的详细信息...................................................................11 3.1.3.3 查看数据节点的详细信息.........................................................................11 3.1.4 验证数据的准确性................................................................................................ 13 3.1.5 pg_dump 同步数据总结........................................................................................13 3.2 使用 dblink 同步数据........................................................................................................13 3.2.1 dblink 同步相同集群不同数据库的数据.............................................................13 3.2.1.1 同步语句......................................................................................................13 3.2.1.2 查看 Master 节点的详细信息...................................................................15 3.2.1.3 查看数据节点的详细信息.........................................................................15 3.2.2 验证数据的准确性................................................................................................ 17 3.2.3 dblink 使用总结......................................................................................................17 3.3 使用 gptransfer 同步数据.................................................................................................17 3.3.1 gptransfer 介绍.......................................................................................................17 3.3.2 gptransfer 命令参数介绍.......................................................................................18 3.3.3 查看集群及硬件信息............................................................................................ 19 3.3.4 同集群之间同步数据............................................................................................ 19 3.3.4.1 查看表的详细信息..................................................................................... 19 3.3.4.2 进行表数据同步......................................................................................... 19 3.3.4.3 查看硬件详细信息..................................................................................... 21 3.3.4.4 查看数据的准确性..................................................................................... 23 3.3.4.5 使用 gptransfer 总结...................................................................................23 3.3.5 不同集群之间同步数据........................................................................................ 24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值