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

What's the key differences in existent approaches to mirror Kafka topics

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

我的要求很简单:

根据 this answer 的说法,有几种替代解决方案可以执行此操作:

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

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

我看到你指的是 my comment there...

至于你的子弹

the solution should be JVM application

所有列出的都是Java基于

if destination topic doesn't exist, creates it

这取决于支持 AdminClient API 的 Kafka 代理版本。否则,正如 MirrorMaker 文档所说,您应该在镜像之前创建目标主题,否则您要么 (1) 被拒绝生成,因为自动主题创建被禁用 (2) 看到 "consistent" 数据时出现问题,因为默认配置的主题是创建。

也就是说,默认情况下,MirrorMaker 不会 "propogate" 自己配置主题。我看的时候,MirrorTool 同样没有。我没有仔细查看 Mirus,但似乎只保留了分区数量

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

Replicator、MirrorTool 和 Mirus 都是基于 Kafka Connect API。 KIP-382 也会是

Build my own application (based on Kafka Streams functionality

Kafka Streams 只能通信 from()to() 一个 单个集群 .

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

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

solution should have the ability to add prefixes/suffixes to destination topic names

每个人都可以做到,但 MirrorMaker 需要 extra/custom 代码。 See example by @gwenshap

reload and apply configurations on the fly if they're changed

这是一个棘手的问题...通常,您只是反弹 Java 进程,因为大多数配置仅在启动时加载。例外情况是 whitelisttopics.regex,用于查找要使用的新主题。

KIP-382

很难说会被接受。虽然它写得很周到,而且我个人认为它的范围很合理,但它在某种程度上违背了让 Replicator for Confluent 的目的。大部分 Kafka 提交和支持都发生在 Confluent 之外,这是一种利益冲突

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

MirrorTool 也有一个 KIP,但它似乎在邮件列表中被拒绝,并附有 "Kafka Connect is a pluggable ecosystem, and anyone can go ahead and install this mirroring extension, but it shouldn't be part of the core Kafka Connect project" 的解释,或者至少我是这样读的。


什么是 "better" 见仁见智,还有其他选择(想到 Apache Nifi 或 Streamsets)。 Even using kafkacat and netcat 你可以一起破解集群同步。

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

我发现 MirrorMaker 可能需要指出的一件事是,如果您镜像的主题未使用 DefaultPartitioner,则数据 将重新排列 到目标集群上的 DefaultPartitioner 如果您没有以其他方式将目标 Kafka 生产者配置为使用与源 Kafka 生产者相同的分区值或分区程序 class。