将Apache Kafka MirrorMaker数据迁移到Confluent Replicator

Kafka MirrorMaker是一款用于在两个Apache Kafka集群之间复制数据的独立工具。它将Kafka消费者和生产者连接在一起。从源集群的Topic读取数据,并写入目标集群的同名Topic。相比于Kafka MirrorMaker,Confluent Replicator是一个更完整的解决方案,它能复制Topic的配置和数据,还能与Kafka Connect和Control Center集成,以提高可用性、可扩展性和易用性。

背景信息

本文展示如何将MirrorMaker的数据中心迁移到Replicator。在迁移过程中,消息是从特定时间点开始复制的,而不是从头开始复制,以便于您保留不想迁移的遗留消息。 假设有两个数据中心,DC1和DC2,它们各自运行着一个Kafka集群。DC1中有一个单独的Topic,它已经被复制到了DC2中的同名Topic。该Topic的名称是inventory

示例一:分区数量相同

在本示例中,您将从MirrorMaker迁移数据到Replicator,并在DC1和DC2中为inventory保持相同数量的分区。

前提条件

  • 安装Confluent Platform 5.0.0 或更高版本。更多信息,请参见下载链接

  • DC1 和 DC2 中的inventoryTopic分区数必须相同。

  • Replicator中的src.consumer.group.id必须与MirrorMaker中的group.id相匹配。

操作步骤

  1. 停止DC1中正在运行的MirrorMaker实例,其中<mm pid>是MirrorMaker进程ID。

    kill <mm pid>
  2. 配置并启动Replicator。在本示例中,Replicator可作为可执行文件从命令行或Docker镜像运行。

    1. 将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_consumer.properties。用源集群DC1的bootstrap.servers替换 localhost:9082。

      bootstrap.servers=localhost:9082
      topic.preserve.partitions=true
    2. 将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_producer.properties。用目标集群DC2的bootstrap.servers替换 localhost:9092。

      bootstrap.servers=localhost:9092
    3. 将生产复制因子设置为2或3。

      echo "confluent.topic.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "offset.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "config.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "status.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
    4. 启动Replicator。

      replicator --cluster.id <new-cluster-id> \
      --producer.config replicator_producer.properties \
      --consumer.config replicator_consumer.properties \
      --replication.config ./etc/kafka-connect-replicator/quickstart-replicator.properties

    Replicator将使用MirrorMaker在DC1中提交的位点,开始从DC1复制消息到DC2。

示例二:分区数量不同

在本示例中,您将从MirrorMaker迁移数据到Replicator,DC1和DC2中inventoryTopic的分区数量不同。

前提条件

  • 安装Confluent Platform 5.0.0 或更高版本。更多信息,请参见下载链接

  • Replicator中的src.consumer.group.id必须与MirrorMaker中的group.id相匹配。

操作步骤

  1. 停止DC1中正在运行的MirrorMaker实例,其中<mm pid>是MirrorMaker进程ID。

    kill <mm pid>
  2. 配置并启动Replicator。在本示例中,Replicator可作为可执行文件从命令行或Docker镜像运行。

    1. 将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_consumer.properties。用源集群DC1的bootstrap.servers替换localhost:9082。

      bootstrap.servers=localhost:9082
      topic.preserve.partitions=false
    2. 将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_producer.properties。用目标集群DC2的bootstrap.servers替换localhost:9092。

      bootstrap.servers=localhost:9092
    3. 将生产复制因子设置为2或3。

      echo "confluent.topic.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "offset.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "config.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
      echo "status.storage.replication.factor=3" >> ./etc/kafka-connect-replicator/quickstart-replicator.properties
    4. 启动Replicator。

      replicator --cluster.id <new-cluster-id> \
      --producer.config replicator_producer.properties \
      --consumer.config replicator_consumer.properties \
      --replication.config ./etc/kafka-connect-replicator/quickstart-replicator.properties

    Replicator将使用MirrorMaker在DC1中提交的位点,开始从DC1复制消息到DC2。