功能概述

Kafka MirrorMaker 是 Kafka 官方提供的跨数据中心的流数据同步方案。其实现原理是通过从 Source Cluster 消费消息后,再将消息生产到 Target Cluster。

用户只需要通过简单的 Consumer 配置和 Producer 配置,再启动 MirrorMaker,即可实现准实时的数据同步。更多详细信息可以参见官方文档

操作步骤

步骤一:创建目标 Kafka 集群

  1. 创建一个与源 Kafka 集群同一 VPC 网络下的 Kafka 集群,用作目标集群。详情可参考如何创建 Kafka 集群

  2. 修改目标集群的配置参数 auto.create.topics.enable,设置为 true。详情可参考如何修建 Kafka 集群配置参数

步骤二:配置源集群的消费者参数

登录源集群的客户端节点,执行以下操作。

  1. 创建消费配置文件 consumer.config,并配置消费者参数。

    bootstrap.servers=ip:port,ip:port,ip:port    // 源集群的 Broker 列表
    group.id=xxx                                 // Group ID,用户可自定义
    partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor  // 同步策略
    auto.offset.reset=latest  // earliest 同步所有历史消息;latest 仅同步最新消息,从每个 Topic 的最新开始同步;可以不填,默认为 latest

    示例

    bootstrap.servers=192.168.0.45:9092,192.168.0.46:9092,192.168.0.47:9092
    group.id=mirror-maker
    partition.assignment.strategy=org.apache.kafka.clients.consumer.RoundRobinAssignor
    auto.offset.reset=latest
  2. 创建生产者配置文件 producer.config,并配置生产者参数。

    bootstrap.servers=ip:port,ip:port,ip:port   // 目标集群的 Broker 列表
  3. 执行以下命令,运行 kafka-mirror-maker.sh 脚本文件进行数据迁移。

    /opt/kafka/current/bin/kafka-mirror-maker.sh --consumer.config consumer.config --producer.config producer.config --whitelist ".*"
    说明

    whitelist 为迁移的 Topic 白名单," " 里是 Java 正则表达式,如果只同步部分指定 Topic,填写格式为 "topic1,topic2,topic3"

步骤三:查看迁移结果

登录目标集群的 Kafka Manager,可以看到目标集群中已有源集群的 Topic。

常见问题

为什么执行同步命令,没有效果?

  • 可能原因

    consumer.config 文件中未配置 auto.offset.reset 参数,或 auto.offset.reset 参数配置为 latest。此时将只同步最新消息,原来的历史消息都不同步。

  • 解决方法

    若不需要同步历史消息,可以忽略。如需同步历史消息,可在 consumer.config 文件中配置 auto.offset.reset 参数为 earliest

为什么迁移速度很慢?

  • 可能原因

    Kafka 集群配置不够高,Kafka 客户端节点配置不够高。

  • 解决方法

    用户可以单独创建一个配置更高的云服务器,用于安装 Kafka 客户端,再执行上述同步命令。