【发布时间】: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