反映 Kafka 主题的现有方法的主要区别是什么

yev*_*tsy 5 apache-kafka apache-kafka-connect

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

我的要求很简单:

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

根据this answer有几种替代解决方案来做这些事情:

此外,创建KIP-382是为了使 Mirror Maker 更加灵活和可配置。

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

cri*_*007 2

我看到你指的是我的评论...

至于你的子弹

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

所有列出的都是基于 Java 的

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

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

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

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

Replicator、MirrorTool 和 Mirus 均基于 Kafka Connect API。KIP-382也是如此

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

Kafka Streams只能from()to()单个集群进行通信。

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

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

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

每个人都可以做到这一点,但 MirrorMaker 需要额外/自定义代码。请参阅@gwenshap 的示例

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

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

KIP-382

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

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

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


什么是“更好”是一个见仁见智的问题,而且还有其他选择(我想到的是 Apache Nifi 或 Streamsets)。即使使用kafkacatnetcat你也可以一起破解集群同步。

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

我发现在 MirrorMaker 中需要指出的一件事可能很重要,即如果您正在镜像不使用 Kafka 的主题DefaultPartitioner,那么如果您不以其他方式DefaultPartitioner目标 Kafka 生产者配置为使用与源 Kafka Producer 相同的分区值或分区器类。