7.4. Kafka MirrorMaker 配置
要设置 MirrorMaker,源和目标(目标) Kafka 集群必须正在运行。
您可以使用带有 MirrorMaker 2.0 的 AMQ Streams,虽然早期版本的 mirrorMaker 继续被支持。
MirrorMaker 2.0
MirrorMaker 2.0 基于 Kafka Connect 框架,连接器 管理集群之间的数据传输。
MirrorMaker 2.0 使用:
- 源集群配置使用来自源集群的数据
- 将数据输出到目标集群的目标集群配置
集群配置
您可以在主动/被动或主动/主动集群配置中使用 MirrorMaker 2.0。
- 在主动/主动配置中,两个集群都处于活跃状态,并同时提供相同的数据,如果您需要在不同地理位置的本地都提供相同的数据,这个配置非常有用。
- 在主动/被动配置中,主动集群中的数据会在被动集群被复制,后者处于待机状态(例如在系统失败时进行数据恢复)。
您可以配置 KafkaMirrorMaker2 自定义资源来定义 Kafka Connect 部署,包括源和目标集群的连接详情,然后运行 MirrorMaker 2.0 连接器的集合来进行连接。
根据 KafkaMirrorMaker2 自定义资源中定义的主题,在源和目标集群之间自动同步主题。配置更改会被传播到远程主题,以便检测和创建新的主题和分区。主题复制使用正则表达式模式来定义,以包括或排除主题。
以下 MirrorMaker 2.0 连接器和相关内部主题有助于管理集群之间的数据传输和同步。
- MirrorSourceConnector
- MirrorSourceConnector 从源集群创建远程主题。
- MirrorCheckpointConnector
-
MirrorCheckpointConnector 使用
offset-syncs主题和检查点主题为指定的消费者组映射偏移点。偏移同步主题从记录元数据映射复制主题分区的源和目标偏移。通过检查点主题从每个源集群中发送检查点并复制目标集群。checkpoint 主题映射源和目标集群中每个消费者组中复制的主题分区的最后提交偏移量。 - MirrorHeartbeatConnector
- MirrorHeartbeatConnector 会定期检查集群间的连接。心跳由 MirrorHeartbeatConnector 的每个秒生成成本地集群创建的 heartbeat 主题。如果您在远程和本地位置都有 MirrorMaker 2.0,则 MirrorHeartbeatConnector 的远程位置发出的 heartbeat 会被视为任何远程主题,并由本地集群中的 MirrorSourceConnector 进行镜像(mirror)。heartbeat 主题可让您轻松检查远程集群是否可用,且集群已连接。如果发生错误,则心跳主题偏移位置和时间戳可以帮助进行恢复和诊断。
图 7.1. 在两个集群间复制
两个集群的双向复制
MirrorMaker 2.0 架构支持 主动/主动集群配置中的双向复制,因此两个集群都是活跃的,并同时提供相同的数据。每个目标目的地都需要一个 MirrorMaker 2.0 集群。
远程主题通过自动重命名(将集群名称添加到主题的名称)来区分。如果您要让不同地理位置在本地提供相同的数据,这将非常有用。
但是,如果要在主动/被动集群配置中备份或迁移数据,您可能需要保留主题的原始名称。如果是这样,您可以配置 MirrorMaker 2.0 以关闭自动重命名。
图 7.2. 双向复制
显示 MirrorMaker 2.0 配置的 YAML 示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
version: 3.2.3
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"
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"
# ...