现有的 Kafka 主题镜像方法的主要区别是什么
What's the key differences in existent approaches to mirror Kafka topics
Kafka MirrorMaker
是将 Kafka 主题从源镜像到目标代理的基本方法。不幸的是,它不够可配置,不符合我的要求。
我的要求很简单:
- 解决方案应该是 JVM 应用程序
- 如果目标主题不存在,则创建它
- 解决方案应该能够将 prefixes/suffixes 添加到目标主题名称
- 如果配置发生变化,它应该重新加载并即时应用配置
根据 this answer 的说法,有几种替代解决方案可以执行此操作:
- MirrorTool-for-Kafka-Connect
- Salesforce Mirus(基于 Kafka Connect API)
- Confluent's Replicator
- 构建我自己的应用程序(基于 Kafka Streams 功能)
此外,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 进程,因为大多数配置仅在启动时加载。例外情况是 whitelist
或 topics.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。
Kafka MirrorMaker
是将 Kafka 主题从源镜像到目标代理的基本方法。不幸的是,它不够可配置,不符合我的要求。
我的要求很简单:
- 解决方案应该是 JVM 应用程序
- 如果目标主题不存在,则创建它
- 解决方案应该能够将 prefixes/suffixes 添加到目标主题名称
- 如果配置发生变化,它应该重新加载并即时应用配置
根据 this answer 的说法,有几种替代解决方案可以执行此操作:
- MirrorTool-for-Kafka-Connect
- Salesforce Mirus(基于 Kafka Connect API)
- Confluent's Replicator
- 构建我自己的应用程序(基于 Kafka Streams 功能)
此外,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 进程,因为大多数配置仅在启动时加载。例外情况是 whitelist
或 topics.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。