7.4. Kafka MirrorMaker 配置
要设置 MirrorMaker,源和目标(目标) Kafka 集群必须正在运行。
您可以使用带有 MirrorMaker 2.0 的 AMQ Streams,虽然早期版本的 mirrorMaker 继续被支持。
7.4.1. MirrorMaker 2.0 配置
MirrorMaker 2.0 使用来自源 Kafka 集群的信息,并将其写入目标 Kafka 集群。
MirrorMaker 2.0 使用:
- 源集群配置使用来自源集群的数据
- 将数据输出到目标集群的目标集群配置
MirrorMaker 2.0 基于 Kafka Connect 框架,连接器 管理集群之间的数据传输。
您可以配置 MirrorMaker 2.0 来定义 Kafka Connect 部署,包括源和目标集群的连接详情,然后运行一组 MirrorMaker 2.0 连接器来进行连接。
MirrorMaker 2.0 由以下连接器组成:
MirrorSourceConnector-
源连接器将主题从源集群复制到目标集群。它还复制 ACL,且是
MirrorCheckpointConnector才能运行所必需的。 MirrorCheckpointConnector- 检查点连接器定期跟踪偏移。如果启用,它还会在源和目标集群之间同步消费者组偏移。
MirrorHeartbeatConnector- heartbeat 连接器会定期检查源和目标集群之间的连接。
如果您使用 User Operator 管理 ACL,则无法通过连接器进行 ACL 复制。
将源集群 镜像到 目标集群的过程是异步的。每个 MirrorMaker 2.0 实例都会从一个源集群镜像到一个目标集群。您可以使用多个 mirrorMaker 2.0 实例来镜像任何数量的集群之间的数据。
图 7.1. 在两个集群间复制

默认情况下,每隔 10 分钟对源集群中的新主题进行一次检查。您可以通过在源连接器配置中添加 refresh.topics.interval.seconds 来更改频率。
7.4.1.1. 集群配置
您可以在主动/被动或主动/主动集群配置中使用 MirrorMaker 2.0。
- 主动/主动集群配置
- 主动/主动配置有两个主动集群复制数据。应用程序可以使用任何集群。每个集群可以提供相同的数据。这样,您可以在不同地理位置提供相同的数据。因为消费者组在两个集群中都活跃,复制主题的使用者偏移不会重新同步到源集群。
- 主动/被动集群配置
- 主动/被动配置具有将数据复制到被动集群的主动集群。被动集群处于待机状态。在系统失败时,您可以使用被动集群进行数据恢复。
预期的结构是,生成者和消费者仅连接到活跃集群。每个目标目的地都需要一个 MirrorMaker 2.0 集群。
7.4.1.2. 双向复制(主动/主动)
MirrorMaker 2.0 架构支持 主动/主动集群配置中 双向复制。
每个集群使用 源和目标 主题的概念复制其他 集群的数据。与每个集群中存储相同的主题,远程主题由 MirrorMaker 2.0 自动重命名来代表源集群。原始集群的名称前面是主题名称的前面。
图 7.2. 主题重命名

通过标记原始集群,主题不会重新复制到该集群。
在配置需要数据聚合的构架时,通过远程 主题复制的概念非常有用。消费者可以订阅同一集群中的源和远程主题,而无需单独聚合集群。
7.4.1.3. 单向复制(主动/被动)
MirrorMaker 2.0 架构支持 主动/被动 集群配置中的单向复制。
您可以使用 主动/被动 集群配置进行备份或将数据迁移到另一个集群。在这种情况下,您可能不希望自动重命名远程主题。
您可以通过将 IdentityReplicationPolicy 添加到源连接器配置来覆盖自动重命名。应用此配置后,主题会保留其原始名称。
显示 MirrorMaker 2.0 配置的 YAML 示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
version: 3.3.1
connectCluster: "my-cluster-target"
clusters:
- alias: "my-cluster-source"
bootstrapServers: my-cluster-source-kafka-bootstrap:9092
- alias: "my-cluster-target"
bootstrapServers: my-cluster-target-kafka-bootstrap:9092
mirrors:
- sourceCluster: "my-cluster-source"
targetCluster: "my-cluster-target"
sourceConnector: {}
topicsPattern: ".*"
groupsPattern: "group1|group2|group3"7.4.2. MirrorMaker 配置
早期版本的 MirrorMaker 使用制作者和用户在集群间复制数据。
MirrorMaker 使用:
- 使用源集群数据的消费者配置
- 将数据输出到目标集群的制作者配置
使用者和制作者配置包括任何身份验证和加密设置。
include 字段定义要从源镜像到目标集群的主题。
关键的消费者配置
- 消费者组标识符
- MirrorMaker consumer 的使用者组 ID,以便消耗的消息被分配给消费者组。
- 消费者流的数量
- 一个值,用于决定消费者组中的消费者数量,以并行使用消息。
- 偏移提交间隔
- 一个偏移的提交间隔,用于设置消耗和提交消息之间的时间。
关键的生成者配置
- 发送失败的取消选项
- 您可以定义消息发送失败是否忽略或 mirrorMaker 被终止并重新创建。
显示 MirrorMaker 配置的 YAML 示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker
metadata:
name: my-mirror-maker
spec:
# ...
consumer:
bootstrapServers: my-source-cluster-kafka-bootstrap:9092
groupId: "my-group"
numStreams: 2
offsetCommitInterval: 120000
# ...
producer:
# ...
abortOnSendFailure: false
# ...
include: "my-topic|other-topic"
# ...