使用 Apache Kafka Mirror Maker 2 将数据从 Kafka 群集复制到事件中心

本教程介绍如何使用 Mirror Maker 2 将数据从现有 Kafka 群集复制到 Azure 事件中心。

Image showing the flow of events from Kafka MirrorMaker to Event Hubs.

注意

GitHub 上提供了此示例

本教程介绍如何执行下列操作:

  • 创建事件中心命名空间
  • 设置或使用现有的 Kafka 群集
  • 配置 Kafka Mirror Maker 2
  • 运行 Kafka Mirror Maker 2

简介

Apache Kafka MirrorMaker 2.0 (MM2) 旨在更轻松地将主题从一个 Kafka 群集镜像或复制到另一个群集。 Mirror Maker 使用 Kafka Connect 框架来简化配置和缩放。 有关 Kafka MirrorMaker 的更多详细信息,请参阅 Kafka 镜像/MirrorMaker 指南

由于 Azure 事件中心与 Apache Kafka 协议兼容,因此你可以使用 Mirror Maker 2 在现有的 Kafka 群集和事件中心命名空间之间复制数据。

Mirror Maker 2 动态检测主题的更改,并确保源和目标主题属性同步,包括偏移和分区。 它可用于在 Kafka 群集和事件中心命名空间之间双向复制数据。

先决条件

若要完成本教程,请确保做好以下准备:

  • 通读用于 Apache Kafka 的事件中心一文。
  • Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个试用版订阅
  • Java 开发工具包 (JDK) 1.7+
    • 在 Ubuntu 上运行 apt-get install default-jdk,以便安装 JDK。
    • 请确保设置 JAVA_HOME 环境变量,使之指向在其中安装了 JDK 的文件夹。
  • 下载安装 Maven 二进制存档
    • 在 Ubuntu 上,可以通过运行 apt-get install maven 来安装 Maven。
  • Git
    • 在 Ubuntu 上,可以通过运行 sudo apt-get install git 来安装 Git。
  • Apache Kafka 发行版
    • 下载首选的 Apache Kafka 发行版(应包含 Mirror Maker 2 发行版。)

创建事件中心命名空间

要从事件中心服务进行发送和接收,需要使用事件中心命名空间。 有关创建命名空间和事件中心的说明,请参阅创建事件中心。 请确保复制事件中心连接字符串,以供将来使用。

克隆示例项目

获得事件中心连接字符串后,即可克隆适用于 Kafka 的 Azure 事件中心存储库并导航到 mirror-maker-2 子文件夹:

git clone https://github.com/Azure/azure-event-hubs-for-kafka.git
cd azure-event-hubs-for-kafka/tutorials/mirror-maker-2

设置或使用现有的 Kafka 群集

如果你没有 Kafka 群集,请使用 Kafka 快速入门指南设置具有所需设置的 Kafka 群集(或使用现有的 Kafka 群集)。 出于测试目的,还可以在新创建的 Kafka 群集中创建几个主题,并向这些主题发布数据。

如果在本地或托管的 Kafka 云服务中已有一个 Kafka 群集,可以使用它将现有数据复制到事件中心。

配置 Kafka Mirror Maker 2

Apache Kafka 发行版附带 connect-mirror-maker.sh 脚本,该脚本与用于实现分布式 Mirror Maker 2 群集的 Kafka 库捆绑在一起。 它基于一个配置文件在内部管理连接辅助角色。 在内部,MirrorMaker 驱动程序创建和处理每个连接器的配对 - MirrorSource 连接器、MirrorSink 连接器、MirrorCheckpoint 连接器和 MirrorHeartbeat 连接器。

  1. 若要配置 Mirror Maker 2 以复制数据,需要更新 Mirror Maker 2 配置文件 kafka-to-eh-connect-mirror-maker.properties 以定义复制拓扑。

  2. kafka-to-eh-connect-mirror-maker.properties 配置文件中,定义计划用于 Kafka 群集(源)和事件中心(目标)的群集别名。

     # cluster aliases 
     clusters = source, destination
    
  3. 然后指定源(即 Kafka 群集)的连接信息。

     source.bootstrap.servers = your-kafka-cluster-hostname:9092
     #source.security.protocol=SASL_SSL
     #source.sasl.mechanism=PLAIN
     #source.sasl.jaas.config=<replace sasl jaas config of your Kafka cluster>;
    
  4. 指定目标(创建的事件中心命名空间)的连接信息。

     destination.bootstrap.servers = <your-enventhubs-namespace>.servicebus.chinacloudapi.cn:9093
     destination.security.protocol=SASL_SSL
     destination.sasl.mechanism=PLAIN
     destination.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='$ConnectionString' password='<Your Event Hubs namespace connection string.>';
    
  5. 启用从源 Kafka 群集到目标事件中心命名空间的复制流。

     source->destination.enabled = true
     source->destination.topics = .*
    
  6. 更新 Mirror Maker 在目标中创建的远程主题和内部主题的复制因子。

     replication.factor=3
    
     checkpoints.topic.replication.factor=3
     heartbeats.topic.replication.factor=3
     offset-syncs.topic.replication.factor=3    
    
     offset.storage.replication.factor=3
     status.storage.replication.factor=3
     config.storage.replication.factor=3
    
  7. 然后,将 kafka-to-eh-connect-mirror-maker.properties 配置文件复制到 Kafka 发行版的配置目录,并使用以下命令运行 Mirror Maker 2 脚本。

     ./bin/connect-mirror-maker.sh ./config/kafka-to-eh-connect-mirror-maker.properties
    
  8. 成功执行脚本后,你应会看到 Kafka 主题和事件已复制到事件中心命名空间。

  9. 若要验证事件是否到达已启用 Kafka 的事件中心,请检查 Azure 门户中的入口统计信息,或针对事件中心运行使用者。

示例

请参阅 GitHub 上的以下示例:

后续步骤

若要详细了解适用于 Kafka 的事件中心,请参阅以下文章: