我们当前正在使用Apache Kafka 0.10.1.1。 我们正在迁移到Confluent Platform5.X。 新群集完全在不同的物理节点集上设置。
虽然我们已经在进行API升级,但是我们的应用程序使用spring-boot
,但我们正在尝试弄清楚如何迁移消息?我需要在目标集群中保持相同的消息顺序。
答案 0 :(得分:1)
假设新集群中的主题定义完全相同(即:分区,保留等),并且message键上的Producer哈希函数会将您的消息传递到同一分区(简直是笨拙)如果您有空键,因为它最终会出现在一个随机分区中),则您可以从最早的旧卡夫卡经纪人主题中最早消费,然后使用自定义消费者/生产者或诸如{ {1}}。
如果您要确保获得相同的订购,则每个主题只能使用一个消费者,并且如果您的消费者支持单线程运行,甚至更好(可能避免出现竞争状况)。
您也可以尝试使用更常见的解决方案,例如MirrorMaker,但是建议MirrorMaker的订购保证为:
但是,MirrorMaker进程将 保留并使用消息密钥进行分区,以便保留顺序 在每个键的基础上。
注意:如第一个解决方案中所述,并且如cricket_007所述,只有在使用默认分区程序并希望在新群集中继续使用它的情况下,它才有效。
最后,如果一切顺利,您可以从旧的kafka代理中手动复制消费者抵销,并在新的集群消费者组中进行定义。
免责声明:这纯粹是理论上的。我从来没有尝试过具有这种严格要求的迁移。
答案 1 :(得分:1)
Confluent包含一个称为Replicator的工具,该工具是一项企业功能,您可以使用30天试用期来执行数据迁移。
但是,从本质上讲,是的,您唯一能做的是从一个群集中消费,然后生产到另一个群集中。在不太理想的网络条件下,您可能会在目的地获得重复的数据,但这只是使用该平台的一个折衷。
FWIW,我建议尽可能将Confluent 3.x匹配组件添加到现有集群中。甚至只是首先单独进行经纪人的滚动升级。我的意思是,没有什么可以“迁移到Confluent”的,因为Kafka并没有什么变化,您只需要在其周围添加其他流程,例如Schema Registry或Control Center