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 中的
inventory
Topic分区数必须相同。Replicator中的
src.consumer.group.id
必须与MirrorMaker中的group.id
相匹配。
操作步骤
停止DC1中正在运行的MirrorMaker实例,其中
<mm pid>
是MirrorMaker进程ID。kill <mm pid>
配置并启动Replicator。在本示例中,Replicator可作为可执行文件从命令行或Docker镜像运行。
将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_consumer.properties。用源集群DC1的bootstrap.servers替换 localhost:9082。
bootstrap.servers=localhost:9082 topic.preserve.partitions=true
将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_producer.properties。用目标集群DC2的bootstrap.servers替换 localhost:9092。
bootstrap.servers=localhost:9092
将生产复制因子设置为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
启动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中inventory
Topic的分区数量不同。
前提条件
安装Confluent Platform 5.0.0 或更高版本。更多信息,请参见下载链接。
Replicator中的
src.consumer.group.id
必须与MirrorMaker中的group.id
相匹配。
操作步骤
停止DC1中正在运行的MirrorMaker实例,其中
<mm pid>
是MirrorMaker进程ID。kill <mm pid>
配置并启动Replicator。在本示例中,Replicator可作为可执行文件从命令行或Docker镜像运行。
将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_consumer.properties。用源集群DC1的bootstrap.servers替换localhost:9082。
bootstrap.servers=localhost:9082 topic.preserve.partitions=false
将以下配置添加到CONFLUENT_HOME/etc/kafka-connect-replicator/replicator_producer.properties。用目标集群DC2的bootstrap.servers替换localhost:9092。
bootstrap.servers=localhost:9092
将生产复制因子设置为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
启动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。