卡夫卡MirrorMaker困境

时间:2018-07-25 22:28:47

标签: apache-kafka

基本上,MM复制的副本比我需要的更多。

我有四个环境DEV01,DEV02,TST01和TST02,每个环境都有两个运行同一应用程序且正在生成JSON文件的服务器。 Logstash正在读取这些文件并将消息推入两个,三个节点的Kafka群集KAF01和KAF02。 DEV01和TST01框推送到带有相应DEV01和TST01主题的KAF01集群,而DEV02&TST02框推送到带有相应DEV02和TST02主题的KAF02集群。 Logstash在每个Kafka节点上运行,然后将消息推送到相应的Elasticsearch群集中。这一切都按预期工作。然后,我将MM添加到环境(即DEV01 <-> DEV02,TST01 <-> TST02)之间的复制消息中。我为DEV环境启动了MM流程,并且一切正常。然后,在同一台主机上,我为TST环境启动了第二个MM进程,一切似乎都很好,直到我意识到自己在DEV Elasticsearch中看到了来自TST的消息,反之亦然。

这是流程的示意图:

Flow Diagram

我在每个Kafka群集的第一台主机(即kaf01-01和kaf02-01)上运行MM。对于KAF01集群,已设置kaf01-01以将dev01和tst01主题都镜像到KAF02集群:

kafka-mirror-maker.sh kafka.tools.MirrorMaker --consumer.config dev01_mm_source.properties --num.streams 1 --producer.config dev01_mm_target.properties --whitelist="dev01"

对于--consumer.configdev01_mm_source.properties文件使用KAF01群集节点进行配置。对于--producer.configdev01_mm_target.properties文件使用KAF02群集节点进行配置。

kafka-mirror-maker.sh kafka.tools.MirrorMaker --consumer.config tst01_mm_source.properties --num.streams 1 --producer.config tst01_mm_target.properties --whitelist="tst01"

对于--consumer.configtst01_mm_source.properties文件使用KAF01群集节点进行配置。对于--producer.configtst01_mm_target.properties文件使用KAF02群集节点进行配置。

对于KAF02集群,已设置kaf02-01以将dev02和tst02主题都镜像到KAF01集群:

kafka-mirror-maker.sh kafka.tools.MirrorMaker --consumer.config dev02_mm_source.properties --num.streams 1 --producer.config dev02_mm_target.properties --whitelist="dev02"

对于--consumer.configdev02_mm_source.properties文件使用KAF02群集节点进行配置。对于--producer.configdev02_mm_target.properties文件配置有KAF01群集节点。

kafka-mirror-maker.sh kafka.tools.MirrorMaker --consumer.config tst02_mm_source.properties --num.streams 1 --producer.config tst02_mm_target.properties --whitelist="tst02"

对于--consumer.configtst02_mm_source.properties文件使用KAF02群集节点进行配置。对于--producer.configtst02_mm_target.properties文件配置有KAF01群集节点。

我把事情弄混了吗?我有--consumer.config--producer.config文件向后吗?我使用的--whitelist选项的正则表达式不正确吗?也没有真正使用正则表达式,只是一个带引号的字符串。我已对所有“应用程序”框上的Logstash配置为推送到正确的Kafka主题,并且将Kafka框上的Logstash配置为从正确的Kafka主题提取,然后推送到正确的Elasticsearch集群进行了三重检查。 >

今天刚开始与Kafka和MM合作,所以我对这一切都是陌生的,非常感谢任何/所有帮助。

1 个答案:

答案 0 :(得分:0)

我已经弄清楚了。我试图将Logstash输出到两个不同的ES群集,而Logstash的单个实例显然无法做到,因此将它们融合在一起。 MirrorMaker可以按预期工作。我已经更改了Logstash的运行位置,以便从Kafka主题中提取出每个Elasticsearch节点本身的信息,以进一步区分这一点,一切现在都按预期进行。