我看到你指的是我的评论在那里... https://stackoverflow.com/questions/53067041/mirror-kafka-topics-with-custom-configuration-as-a-standalone-application
至于你的子弹
解决方案应该是JVM应用程序
所有列出的都是基于 Java 的
如果目标主题不存在,则创建它
这取决于 Kafka Broker 版本支持AdminClient
API。否则,正如 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 生产者相同的分区值或分区器类,则在目标集群上。