【问题标题】:Kafka MirrorMaker Woes卡夫卡镜子制造者的烦恼
【发布时间】:2018-07-25 22:28:46
【问题描述】:

基本上,MM 复制的内容比我需要的要多。

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

这是一个粗略的流程图:

我在每个 Kafka 集群的第一台主机上运行 MM,即:kaf01-01 和 kaf02-01。对于 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,所以我对这一切完全陌生,非常感谢任何/所有帮助。

【问题讨论】:

  • 我不太了解箭头。你在运行一个双向镜像吗?我建议研究 MirrorMaker 的消息处理程序参数并使用其来源的后缀重命名该主题。例如github.com/gwenshap/kafka-examples/blob/master/…
  • 可能只是一个错误的箭头选择。我不认为双向镜像是可能的。 KAF01 将 DEV01 和 TST01 主题推送到 KAF02 集群主题,然后 KAF02 将消息从 DEV02 和 TST02 主题推送到 KAF01 集群主题。
  • 这不是双向镜像,而是运行相同的命令并翻转生产/消费。您是否有特殊原因为每个主题运行一个 MirrorMaker,而不是使用白名单同时镜像两个主题?那么您将只有两个进程来维护和调试,而不是四个。您可能想使用正则表达式 ^(topic)$ 强制您的主题名称完全匹配
  • 好吧,这更有意义。我也没有意识到我可以为每个 MM 实例做多个主题。这是否只是--whitelist 中的多个条目,即:--whitelist="^(topic1)$,^(topic2)$"?另外,我在源集群上运行 MM,对吗?
  • @cricket_007 谢谢。我已经想通了。我试图将 Logstash 输出到两个不同的 ES 集群,而 Logstash 的单个实例无法做到这一点,所以它将它们混合在一起。 MirrorMaker 按预期工作。我已经更改了 Logstash 的运行位置以将其分离出来,现在一切都按预期工作。

标签: apache-kafka


【解决方案1】:

我已经想通了。我试图将 Logstash 输出到两个不同的 ES 集群,而 Logstash 的单个实例显然无法做到这一点,所以它将它们混合在一起。 MirrorMaker 按预期工作。我已经更改了 Logstash 的运行位置,在每个 Elasticsearch 节点本身上从 Kafka 主题中提取,以将其进一步分离出来,现在一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 2020-08-27
    • 2017-02-21
    • 2019-07-03
    • 2018-05-05
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多