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

标签 apache-kafka apache-kafka-connect

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

我的要求很简单:

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

  • 根据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 的 Kafka 代理版本。 API。否则,正如 MirrorMaker 文档所说,您应该在镜像之前创建目标主题,否则您要么(1)被拒绝生成,因为自动主题创建被禁用(2)因为创建了默认配置的主题而看到“一致”数据时出现问题。

    也就是说,默认情况下,MirrorMaker 不会自行“传播”主题配置。当我看的时候,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接口(interface)用于。

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

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



    每个人都可以做到这一点,但 MirrorMaker 需要额外/自定义代码。 See example by @gwenshap

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



    那是一个棘手的问题...通常,您只是反弹 Java 进程,因为大多数配置仅在启动时加载。异常(exception)是 whitelisttopics.regex寻找新的消费主题。

    KIP-382



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

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

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

    什么是“更好”是一个见仁见智的问题,还有其他选择(想到 Apache Nifi 或 Streamsets)。 Even using kafkacat and netcat 你可以一起破解集群同步。

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

    我发现 MirrorMaker 可能需要指出的一件事是,如果您要镜像的主题不使用 DefaultPartitioner ,然后数据将被重新洗牌到 DefaultPartitioner如果您没有将目标 Kafka 生产者配置为使用与源 Kafka 生产者相同的分区值或分区器类,则在目标集群上。

    关于apache-kafka - 现有镜像 Kafka 主题方法的主要区别是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53333860/

    相关文章:

    java - 卡夫卡流: Read from ALL partitions in every instance of an application

    java - 如何识别哪些消息成功发布到kafka主题以及哪些消息失败

    hadoop - 根据 Kafka 的消息数据写入自定义 HDFS 目录 -> Flume -> hdfs 摄取

    docker - 运行Confluent docker 时记录

    apache-kafka - 重新启动集群时连接消费者作业被删除

    java - KStream-KStream inner join 基于匹配复合键的消息

    Python - Apache Beam - Flink 运行器设置 : ReadFromKafka returns error - RuntimeError: cannot encode a null byte[]

    apache-kafka - Kafka Connect 警报选项?

    jdbc - avro 模式中的时间戳在 Kafka Connect JDBC 中产生不兼容的值验证

    java - 如何在没有连接器的情况下创建正确的 kafka-connect 插件?