第 8 章 使用 MirrorMaker 2.0
使用 MirrorMaker 2.0 在两个或多个活跃的 Kafka 集群或跨数据中心间复制数据。
要配置 MirrorMaker 2.0,请编辑 config/connect-mirror-maker.properties 配置文件。如果需要,您可以为 MirrorMaker 2.0 启用分布式追踪。
处理大量消息
您可以调优配置来处理大量消息。更多信息请参阅 第 9 章 处理大量消息。
MirrorMaker 2.0 具有以前版本的 MirrorMaker 不支持的功能。但是,您可以将 MirrorMaker 2.0 配置为用于传统模式。
8.1. MirrorMaker 2.0 数据复制 复制链接链接已复制到粘贴板!
集群的数据复制支持:
- 在系统失败时恢复数据
- 用于分析的数据聚合
- 对特定集群的数据访问限制
- 在特定位置置备数据以改进延迟
8.1.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 实例来镜像任何数量的集群之间的数据。
图 8.1. 在两个集群间复制
默认情况下,系统会每 10 分钟检查源集群中的新主题。您可以通过在源连接器配置中添加 refresh.topics.interval.seconds 来更改频率。
8.1.1.1. 集群配置 复制链接链接已复制到粘贴板!
您可以在主动/被动或主动/主动集群配置中使用 MirrorMaker 2.0。
- 主动/主动集群配置
- 主动/主动配置有两个主动集群复制数据。应用程序可以使用任何集群。每个集群可以提供相同的数据。这样,您可以在不同地理位置提供相同的数据。因为消费者组在两个集群中都活跃,复制主题的使用者偏移不会重新同步到源集群。
- 主动/被动集群配置
- 主动/被动配置具有将数据复制到被动集群的主动集群。被动集群处于待机状态。在系统失败时,您可以使用被动集群进行数据恢复。
预计是生产者和消费者仅连接到活跃集群。每个目标目的地需要 MirrorMaker 2.0 集群。
8.1.1.2. 双向复制(active/active) 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 架构在 主动/主动集群配置中 支持双向复制。
每个集群使用 source 和 remote 主题的概念复制其他集群的数据。与同一主题存储在每个集群中,远程主题由 MirrorMaker 2.0 自动重命名,以代表源集群。原始集群的名称前面是主题名称的前面。
图 8.2. 主题重命名
通过标记原始集群,主题不会复制到该集群。
在配置需要数据聚合的架构时,通过 远程 主题复制的概念很有用。消费者可以订阅同一集群中的源和远程主题,而无需单独聚合集群。
8.1.1.3. 单向复制(主动/被动) 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 架构在 主动/被动 集群配置中支持单向复制。
您可以使用 主动/被动 集群配置来备份或迁移数据到另一个集群。在这种情况下,您可能不希望自动重命名远程主题。
您可以通过在源连接器配置中添加 IdentityReplicationPolicy 来覆盖自动重命名。应用此配置后,主题会保留其原始名称。
8.1.2. 主题配置同步 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 支持源和目标集群之间的配置同步。您可以在 MirrorMaker 2.0 配置中指定源主题。MirrorMaker 2.0 监控源主题。MirrorMaker 2.0 检测并传播对源主题的更改到远程主题。更改可能包括自动创建缺少的主题和分区。
在大多数情况下,您写入本地主题并从远程主题读取。虽然对远程主题的写操作不会被阻止,但应当避免进行写入操作。
8.1.3. 偏移跟踪 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 使用内部主题跟踪消费者组的偏移。
offset-syncs主题-
offset-syncs主题映射复制主题元数据的源和目标偏移。 Checkpoints主题-
checkpoints主题映射源和目标集群中每个消费者组中复制的主题分区的最后提交偏移量。
因为它们由 MirrorMaker 2.0 内部使用,因此不会直接与这些主题进行交互。
MirrorCheckpointConnector 发出用于偏移跟踪 的检查点。检查点 主题的偏移会在预先确定的时间间隔通过配置进行跟踪。这两个主题都支持从故障转移上的正确偏移位置完全恢复复制。
offset-syncs 主题的位置默认为 源集群。您可以使用 offset-syncs.topic.location 连接器配置将其更改为 目标集群。您需要对包含该主题的集群进行读/写的访问权限。使用目标集群作为 offset-syncs 主题的位置,即使您只对源集群具有读取访问权限也一样使用 MirrorMaker 2.0。
8.1.4. 同步消费者组偏移 复制链接链接已复制到粘贴板!
__consumer_offsets 主题存储了为每个消费者组提交偏移的信息。偏移同步会定期将源集群的消费者组的使用者偏移转移到目标集群的使用者偏移量中。
偏移同步在 主动/被动配置 中特别有用。如果活跃集群停机,消费者应用程序可以切换到被动(standby)集群,并从最后一个传输的偏移位置获取出来。
要使用主题偏移同步,请通过将 sync.group.offsets.enabled 添加到检查点连接器配置来启用同步,并将属性设置为 true。默认禁用同步。
在源连接器中使用 IdentityReplicationPolicy 时,还必须在检查点连接器配置中进行配置。这样可确保为正确的主题应用镜像的使用者偏移。
消费者偏移仅与目标集群中未激活的消费者组同步。如果使用者组位于目标集群中,则无法执行同步,并返回 UNKNOWN_MEMBER_ID 错误。
如果启用,则定期从源集群的偏移同步。您可以通过在检查点连接器配置中添加 sync.group.offsets.interval.seconds 和 emit.checkpoints.interval.seconds 来更改频率。属性指定同步消费者组偏移的频率,以及为偏移跟踪发送检查点的频率。两个属性的默认值都是 60 秒。您还可以使用 refresh.groups.interval.seconds 属性更改新消费者组检查的频率,默认情况下每 10 分钟执行。
由于同步基于时间,所以使用者到被动集群的任何交换机都可能会导致消息重复。
如果您的应用程序以 Java 编写,您可以使用 RemoteClusterUtils.java 实用程序通过应用同步偏移。实用程序从 checkpoints 主题获取消费者组的远程偏移。
8.1.5. 连接性检查 复制链接链接已复制到粘贴板!
MirrorHeartbeatConnector 发出 心跳 来检查集群之间的连接。
内部 心跳 主题从源集群复制。目标集群使用 heartbeat 主题检查以下内容:
- 管理集群间连接性的连接器
- 源集群可用