使用 Apache Kafka Mirror Maker 2 将数据从 Kafka 群集复制到事件中心
本教程介绍如何使用 Mirror Maker 2 将数据从现有 Kafka 群集复制到 Azure 事件中心。
注意
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 的文件夹。
- 在 Ubuntu 上运行
- 下载和安装 Maven 二进制存档
- 在 Ubuntu 上,可以通过运行
apt-get install maven
来安装 Maven。
- 在 Ubuntu 上,可以通过运行
- Git
- 在 Ubuntu 上,可以通过运行
sudo apt-get install git
来安装 Git。
- 在 Ubuntu 上,可以通过运行
- 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 连接器。
若要配置 Mirror Maker 2 以复制数据,需要更新 Mirror Maker 2 配置文件
kafka-to-eh-connect-mirror-maker.properties
以定义复制拓扑。在
kafka-to-eh-connect-mirror-maker.properties
配置文件中,定义计划用于 Kafka 群集(源)和事件中心(目标)的群集别名。# cluster aliases clusters = source, destination
然后指定源(即 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>;
指定目标(创建的事件中心命名空间)的连接信息。
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.>';
启用从源 Kafka 群集到目标事件中心命名空间的复制流。
source->destination.enabled = true source->destination.topics = .*
更新 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
然后,将
kafka-to-eh-connect-mirror-maker.properties
配置文件复制到 Kafka 发行版的配置目录,并使用以下命令运行 Mirror Maker 2 脚本。./bin/connect-mirror-maker.sh ./config/kafka-to-eh-connect-mirror-maker.properties
成功执行脚本后,你应会看到 Kafka 主题和事件已复制到事件中心命名空间。
若要验证事件是否到达已启用 Kafka 的事件中心,请检查 Azure 门户中的入口统计信息,或针对事件中心运行使用者。
示例
请参阅 GitHub 上的以下示例:
如果你使用 CNCF Strimzi Operator 在 Kubernetes 上托管 Apache Kafka,可以使用事件中心的 Strimzi Mirror Maker 2 示例。
后续步骤
若要详细了解适用于 Kafka 的事件中心,请参阅以下文章: