【问题标题】:Kafka Mirror Maker place of executionKafka Mirror Maker 执行地点
【发布时间】:2019-03-12 13:09:50
【问题描述】:

有一些最佳实践建议在目标集群上运行 Mirror Maker。 https://community.hortonworks.com/articles/79891/kafka-mirror-maker-best-practices.html

我想知道为什么存在此建议,因为最终所有数据都必须跨越集群之间的边界,无论它们是在目标处使用还是在源处产生。我可以想象的一个原因是 Mirror Maker 支持多个消费者,但只支持一个生产者 - 因此使用多个消费者可能会加快使用延迟较大的途中的数据。

如果多线程的性能很重要,那么使用多个生产者(每个消费者一个)来复制数据(使用自定义复制过程)是否有用?有谁知道为什么 Mirror Maker 在所有消费者之间共享一个 Producer?

我的用例是将数据从多个源集群 (~10) 复制到单个目标集群。我宁愿在源集群上运行复制过程,以避免在目标集群上出现许多复制过程(每个用于一个源)。

非常欢迎有关此主题的提示和建议。

【问题讨论】:

  • 我相信单一生产者的目的是避免无序复制,但这只是猜测。
  • 据我了解,每个分区都可以保证排序,并且作为消费者绑定到特定分区,为什么相应的生产者应该打乱目标记录。我需要考虑一下......也许再平衡可能是一个失败点......
  • 保证每个分区,但仅限于消费者端。两个生产者可能会生产到同一个分区(这很常见)如果您的原始主题由例如两个不同的生产者填充,每个生产者都有自己的线程,再次启动相同的两个生产者不会产生完美的副本,在99% 的时间。我相信,为了确保您以相同的顺序生产,您必须按顺序消费(Kafka 在分区方面保证这一点),并且只启动一个生产者,充当“顺序”复制机。那是我的猜测你! :) 我可能 100% 不正确。

标签: java apache-kafka apache-kafka-mirrormaker


【解决方案1】:

我也把这个问题放在了 Apache Kafka 邮件列表中:
https://lists.apache.org/thread.html/06a3c3ec10e4c44695ad0536240450919843824fab206ae3f390a7b8@%3Cusers.kafka.apache.org%3E

我想在这里引用一些合理的答案:

Franz,您可以在源或目标集群上或附近运行 MM,但是 它在目标附近更有效,因为这可以最大限度地减少生产者 潜伏。如果延迟很高,生产者将阻止等待 ACK 飞行中的记录,这会降低吞吐量。

我建议在目标集群附近运行 MM,但不一定在 相同的机器,因为 Kafka 节点通常相对昂贵, 具有 SSD 阵列和巨大的 IO 带宽等,这对于 嗯。

瑞安

嗨,弗兰兹!

我想,原因之一可能是额外的安全性,以防万一 网络分裂。

即使使用好的软件,也存在一定的错误概率。所以,如果我们 将 MM 放在源集群上,网络将分裂,消费者可以 (理论上)继续从源集群读取消息并且 即使没有来自目标集群的询问,也可以提交它们(其中之一 可能的错误)。这样,您最终会丢失消息 网络修复后的生产者。

另一方面,如果我们将 MM 放在目标集群和网络上 会分裂,没有不好的事情发生。 MM 将无法从 grep 数据 源集群,因此即使出现错误,您的数据也不会损坏。

托利亚

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2019-11-27
    • 2021-03-28
    相关资源
    最近更新 更多