Kafka MirrorMaker 搭建异地同步集群
由于业务需要,要求异地的两套kafka集群同步数据,于是使用乐kafka自带的MirrorMaker工具kafka版本(kafka_2.12-2.1.0),zookeeper版本(zookeeper-3.4.13)。
下面介绍的是本地测试部署的环境,
启动两套kafka-zookeeper 环境
第一套集群的zookeeper使用默认端口2181,kafka使用默认9092端口。默认配置可不做更改,只需将zookeeper 的config目录下zoo_sample.cfg复制为zoo.cfg即可启动。(启动时先启动zookeeper再启动kafka)
部署启动的具体配置步骤课可参考我的另一篇博客
https://blog.csdn.net/w4187402/article/details/84848201
第二套配置时需要修改kafka和zookeeper的启动端口和日志目录,避免和第一套集群冲突。
zoo.config文件中修改数据目录和启动端口
kafka的config文件夹中server.properties文件修改监听端口和zookeeper连接端口及日志目录
修改完成后启动第二套集群(启动命令在https://blog.csdn.net/w4187402/article/details/84848201中有介绍)。
正常启动后命令窗口是常驻的,如下四个窗口(本人已运行过生产者消费者所以会有日志变化)。
创建consumer配置文件(采用拉模型,网络中断下的一个消费者远比一个生产者安全的多)
在第一套集群目录下创建文件
sourceClusterConsumer.config
bootstrap.servers=localhost:9092
group.id=test-mirror-consumer-group
在第二套集群目录下创建文件
sourceClusterConsumer.config
bootstrap.servers=localhost:9093
group.id=test-mirror-consumer-group
创建producer配置文件
在第一套集群目录下创建文件
targetClusterProducer.config
bootstrap.servers=localhost:9093
在第二套集群目录下创建文件
targetClusterProducer.config
bootstrap.servers=localhost:9092
创建完成后的kafka0
创建完成后的kafka1
启动MirrorMaker进程
命令如下
.\kafka_2.12-2.1.0\bin\windows\kafka-run-class.bat kafka.tools.MirrorMaker --consumer.config sourceClusterConsumer.config --num.streams 1 --producer.config targetClusterProducer.config --whitelist=".*"
其中
.\kafka_2.12-2.1.0\bin\windows\kafka-run-class.bat 是启动脚本(kafka自带)
kafka.tools.MirrorMaker 是脚本中的main方法
–consumer.config 指定消费者配置文件
–num.streams 消费者线程数
–producer.config 指定生产者配置文件
–whitelist=".*" 白名单配置
由于我需要两台集群互相同步但是数据不能重复消费,所以两台集群生产者消费者的topic需要设置为不相同的两个名称。白名单的配置在这时就起作用了,如果白名单配置为 –whitelist=".*" 也就是全部同步。会导致一个生产者发送消息后,这条消息会在两个集群中来回传递,你会看到一个消费者接收到这条消息的几百个副本。
最终我的集群1启动脚本为
.\kafka_2.12-2.1.0\bin\windows\kafka-run-class.bat kafka.tools.MirrorMaker --consumer.config sourceClusterConsumer.config --num.streams 1 --producer.config targetClusterProducer.config --whitelist="video"
集群2启动脚本为
.\kafka_2.12-2.1.0\bin\windows\kafka-run-class.bat kafka.tools.MirrorMaker --consumer.config sourceClusterConsumer.config --num.streams 1 --producer.config targetClusterProducer.config --whitelist="video1"
启动后命令行如下
白名单可根据生产需要配置,多个以逗号隔开
用java启动两个消费者和两个生产者,发现可以拉拉取到对方集群的消息
配置测试大功告成。