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. 在两个集群间复制

MirrorMaker 2.0 复制

默认情况下,每隔 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. 主题重命名

MirrorMaker 2.0 双向架构

通过标记原始集群,主题不会重新复制到该集群。

在配置需要数据聚合的构架时,通过远程 主题复制的概念非常有用。消费者可以订阅同一集群中的源和远程主题,而无需单独聚合集群。

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"
  # ...