【问题标题】:Kafka Message migrationKafka 消息迁移
【发布时间】:2019-05-09 01:45:22
【问题描述】:

我们目前在 Apache Kafka 0.10.1.1 上运行。 我们正在迁移到 Confluent Platform 5.X。 新集群完全设置在不同的物理节点集上。

虽然我们已经在努力升级 API,但我们的应用程序使用 spring-boot,我们正试图弄清楚如何迁移消息?我需要在目标集群中保持相同的消息顺序。

  1. 我可以简单地复制邮件吗?
  2. 是否需要将消息重新发布到目标集群才能成功保留?
  3. 还能做什么?

【问题讨论】:

    标签: apache-kafka message data-migration confluent-platform


    【解决方案1】:

    假设新集群中的主题定义完全相同(即:分区的 nbr、保留等),并且消息键上的 Producer 散列函数会将您的消息传递到同一分区(将是一个无赖如果你有空键,因为它最终会在一个随机分区中),你可以简单地从你的旧 kafka 代理主题中最早消费,并使用自定义消费者/生产者或像 @ 之类的工具在新集群中生成你的新主题987654321@.

    如果您想更加确保获得相同的排序,则每个主题只应使用一个消费者,如果您的消费者支持单线程运行,那就更好了(可能会避免竞速条件)。

    您也可以尝试更常见的解决方案,例如 MirrorMaker,但请注意 MirrorMaker 订购保证相当于:

    但是,MirrorMaker 进程将 保留并使用消息键进行分区,以便保留顺序 以每个键为基础。

    注意:正如第一个解决方案中所述以及 cricket_007 所说,它仅在您使用默认分区程序并希望在新集群中继续使用时才有效。

    最后,如果一切正常,您可以从旧的 kafka 代理手动复制您的消费者偏移量,并在您的新集群消费者组中定义它们。

    免责声明:这纯粹是理论上的。我从未尝试过具有这种硬性要求的迁移。

    【讨论】:

    • MirrorMaker 不保留分区顺序,除非在所有内容中都使用默认分区程序
    • 是的,我提到了镜子制造商的订购保证。将使第一个提议的解决方案之间的区别更加清晰。
    • 谢谢@AlexandreJuma。我们确保每个消费者组有一次消费者或单个分区。但是,如果将logs.dir 文件简单地复制到目标集群,您会发现什么问题?即不使用mirrormaker 或任何自定义消费/生产机制。
    • 这是一个巨大的版本提升(0.10.x 到 2.0.x)。不要认为复制日志是一种解决方案。如果您不想消费/生产来迁移数据,您可以考虑将当前集群升级到新的 kafka 集群,并将新的代理节点添加到集群中。然后你可以停用旧节点(我还没有听说有人使用裸 apache kafka 发行版和融合平台这样做,但应该可以)
    【解决方案2】:

    Confluent 包含一个名为 Replicator 的工具,虽然它是一项企业功能,但您可以使用 30 天试用期来执行数据迁移。

    但本质上,是的,您可以做的唯一事情就是从一个集群消费,然后生产到另一个集群。您可能会在不太理想的网络条件下在目的地获得重复数据,但这只是使用平台的权衡。

    FWIW,如果可能的话,我建议先将 Confluent 3.x 匹配组件添加到现有集群中。或者甚至只是首先单独对经纪人进行滚动升级。我的观点是,没有什么可以“迁移到 Confluent”,因为 Kafka 并没有发生什么变化,你只会在它周围添加其他进程,比如 Schema Registry 或 Control Center

    【讨论】:

    • 谢谢。您认为复制logs.dir 不是一个好主意吗? message 版本如果我们需要再次使用它们会产生问题吗?
    • 我不相信复制日志目录,不。除非新代理具有相同的日志版本,但即便如此,Zookeeper 也不知道您复制了该数据
    • 我们在 Kafka 而不是 zookeeper 中管理偏移量,我们将在新的 zookeeper 集合上进行操作。除了offset,对zookeeper的另一个硬依赖是什么?
    • 不,不。不是__consumer_offsets。我的字面意思是备份 Kafka 的 log.dirs,然后恢复到一个全新的代理 不会使这个主题可供消费,因为 Zookeeper 不会知道这个新的代理 ID 或它可能包含的分区
    • 基本上,您还需要迁移/转换 Zookeeper 状态,因为它包含代理映射和分区信息以及主题元数据。偏移不是问题。如果您要恢复它,代理 ID 可以在新集群上更改(并且可能不是 1:1,因为您可以添加新代理或删除其他代理)。因此,它需要在 Zookeeper 数据中手动编辑 Znode。
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 2018-07-19
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2021-02-14
    相关资源
    最近更新 更多