Kafka MirrorMaker
是将Kafka主题从源代理镜像到目标代理的基本方法。不幸的是,它不符合我的配置要求。
我的要求很简单:
- 解决方案应该是JVM应用程序
- 如果目标主题不存在,则创建它
- 解决方案应该能够为目标主题名称添加前缀/后缀
- 如果更改了配置,它应该立即重新加载和应用这些配置
根据这个答案,有几种替代解决方案可以做到这一点:
- 用于Kafka Connect的MirrorTool
- Salesforce Mirus(基于Kafka Connect API)
- Confluent的复制程序
- 构建我自己的应用程序(基于Kafka Streams功能)
此外,KIP-382的创建是为了使Mirror Maker更加灵活和可配置。
因此,我的问题是,这些解决方案的致命功能是什么(与其他解决方案相比),最后,根据提供的需求,什么是更好的解决方案。
我看到你指的是我在那里的评论。。。
至于你的子弹
解决方案应该是JVM应用程序
所有列出的都是基于Java的
如果目标主题不存在,则创建
这取决于支持AdminClient
API的Kafka代理版本。否则,正如MirrorMaker文档所说,您应该在镜像之前创建目标主题,否则您要么(1)因为禁用了自动主题创建而被拒绝生成;(2)因为创建了默认配置的主题而导致无法查看"一致"数据。
也就是说,默认情况下,MirrorMaker不会单独"推荐"主题配置。当我看的时候,MirrorTool同样没有。我没有仔细查看Mirus,但似乎只有分区数量保留了
Confluent Replicator确实复制配置、分区,并且将使用AdminClient。
Replicator、MirrorTool和Mirus都基于Kafka Connect API。KIP-382也将是
构建我自己的应用程序(基于Kafka Streams功能
Kafka Streams只能通过单个集群来通信from()
和to()
。
您最好只使用MirrorMaker,因为它已经是生产者/消费者的包装器,并且支持一个集群到另一个集群。如果您需要自定义功能,那就是MessageHandler
接口的用途。
在更高的层次上,Connect API也是相当可配置的,而且我发现MirrorTool源代码非常容易理解。
解决方案应该能够为目标主题名称添加前缀/后缀
每个人都可以这样做,但MirrorMaker需要额外的/自定义代码。参见@gwenshap 的示例
如果更改,则立即重新加载和应用配置
这是一个棘手的问题。。。通常,您只需重新启动Java进程,因为大多数配置只在启动时加载。例外是whitelist
或topics.regex
,用于查找要消费的新主题。
KIP-382
很难说这会被接受。虽然它写得很好,而且我个人认为它的范围是合理的,但它在某种程度上违背了拥有Replicator for Confluent的目的。大部分Kafka的承诺和支持都发生在Confluent之外,这是一场利益冲突
使用Replicator后,它有一些额外的功能,可以在数据中心出现故障时进行消费者故障切换,因此在有人对Kafka API调用的其他解决方案进行逆向工程之前,它仍然很有价值
MirrorTool也有一个KIP,但它似乎在邮件列表上被拒绝了,并解释说"Kafka Connect是一个可插拔的生态系统,任何人都可以继续安装这个镜像扩展,但它不应该是核心Kafka连接项目的一部分",或者至少我是这么读的。
什么是"更好"是一个意见问题,还有其他选择(脑海中浮现的是Apache Nifi或Streamset)。即使使用kafkacat
和netcat
,也可以破解集群同步。
如果您要为企业许可证付费,主要是为了获得支持,那么您还不如使用Replicator。
在我发现的MirrorMaker中,有一点可能很重要,那就是如果您正在镜像一个不使用DefaultPartitioner
的主题,那么如果您不将目标Kafka生产者配置为使用与源Kafka制作者相同的分区值或分区器类,则数据将被重新整理到目标集群上的DefaultPartitioner
中。