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啓動兩個消費者和兩個生產者,發現可以拉拉取到對方集羣的消息
配置測試大功告成。