现有的 Kafka 主题镜像方法的主要区别是什么

2024-01-11

Kafka MirrorMaker是一种将 Kafka 主题从源代理镜像到目标代理的基本方法。不幸的是,它不符合我的可配置要求。

我的要求很简单:

  • 解决方案应该是JVM应用程序
  • 如果目标主题不存在,则创建它
  • 解决方案应该能够向目标主题名称添加前缀/后缀
  • 如果配置发生更改,它应该立即重新加载并应用配置

根据这个答案 https://stackoverflow.com/questions/53067041/mirror-kafka-topics-with-custom-configuration-as-a-standalone-application有几种替代解决方案可以完成此操作:

  • Kafka-Connect 的镜像工具 https://github.com/Comcast/MirrorTool-for-Kafka-Connect
  • Salesforce 米鲁斯 https://github.com/salesforce/mirus(基于Kafka Connect API)
  • Confluence 的复制器 https://www.confluent.io/connector/confluent-kafka-replicator/
  • 构建我自己的应用程序(基于 Kafka Streams 功能)

而且,KIP-382 https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0创建 Mirror Maker 的目的是为了使 Mirror Maker 更加灵活和可配置。

所以,我的问题是这些解决方案的杀手级功能是什么(与其他解决方案相比),最后根据所提供的要求,更好的功能是什么。


我看到你指的是我的评论在那里... https://stackoverflow.com/questions/53067041/mirror-kafka-topics-with-custom-configuration-as-a-standalone-application

至于你的子弹

解决方案应该是JVM应用程序

所有列出的都是基于 Java 的

如果目标主题不存在,则创建它

这取决于 Kafka Broker 版本支持AdminClientAPI。否则,正如 MirrorMaker 文档所述,您应该在镜像之前创建目标主题,否则您可能会 (1) 由于自动主题创建被禁用而被拒绝生成 (2) 由于创建了默认配置的主题而无法看到“一致”数据。

话虽这么说,默认情况下,MirrorMaker 不会自行“传播”主题配置。当我查看时,MirrorTool 同样没有。我没有仔细研究 Mirus,但似乎只保留了分区数量

Confluence Replicator 会复制配置、分区,并且它将使用 AdminClient。

Replicator、MirrorTool 和 Mirus 均基于 Kafka Connect API。和KIP-382 https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0也会的

构建我自己的应用程序(基于 Kafka Streams 功能

Kafka Streams只能进行通信from() and to() a 单簇.

您不妨只使用 MirrorMaker,因为它已经是生产者/消费者的包装器,并且支持一个集群到另一个集群。如果您需要自定义功能,那就是MessageHandler接口是为了.

在更高的层面上,Connect API 也是相当可配置的,而且我发现 MirrorTool 源代码非常容易理解。

解决方案应该能够向目标主题名称添加前缀/后缀

每个人都可以做到这一点,但 MirrorMaker 需要额外/自定义代码。请参阅@gwenshap 的示例 https://github.com/gwenshap/kafka-examples/tree/master/MirrorMakerHandler

如果配置发生更改,则重新加载并即时应用配置

这是一个棘手的问题...通常,您只需弹起 Java 进程,因为大多数配置仅在启动时加载。例外的是whitelist or topics.regex用于寻找新的消费主题。

KIP-382

很难说这会被接受。虽然它写得很仔细,而且我个人认为它的范围很合理,但它在某种程度上违背了 Replicator for Confluence 的目的。由于大多数 Kafka 提交和支持都是在 Confluence 之外进行的,因此存在利益冲突

使用 Replicator 后,它有一些额外的功能,允许消费者在数据中心发生故障时进行故障转移,因此在有人将 Kafka API 调用逆向工程到其他解决方案之前,它仍然很有价值

MirrorTool 也有一个 KIP,但它似乎在邮件列表中被拒绝,其解释是“Kafka Connect 是一个可插拔的生态系统,任何人都可以继续安装此镜像扩展,但它不应该成为 Kafka Connect 核心的一部分”项目”,或者至少我是这么读的。


什么是“更好”是一个见仁见智的问题,而且还有其他选择(我想到的是 Apache Nifi 或 Streamsets)。即使使用kafkacat and netcat https://github.com/confluentinc/demo-scene/tree/master/export-import-with-kafkacat您可以一起进行集群同步。

如果您支付企业许可证费用,主要是为了支持,那么您不妨使用 Replicator。

我发现在 MirrorMaker 中需要指出的一件事可能很重要,那就是如果您正在镜像一个未使用DefaultPartitioner,然后数据将被重新洗牌进入DefaultPartitioner如果您不以其他方式将目标 Kafka 生产者配置为使用与源 Kafka 生产者相同的分区值或分区器类,则在目标集群上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现有的 Kafka 主题镜像方法的主要区别是什么 的相关文章

随机推荐