第 9 章 在 MirrorMaker 2 中使用 AMQ Streams
使用 MirrorMaker 2 在两个或多个活跃 Kafka 集群之间复制数据,并在数据中心之间复制数据。
要配置 MirrorMaker 2,请编辑 config/connect-mirror-maker.properties 配置文件。如果需要,您可以为 MirrorMaker 2 启用分布式追踪。
处理大量信息
您可以调整配置来处理大量信息。更多信息请参阅 第 11 章 处理大量信息。
MirrorMaker 2 具有之前版本的 MirrorMaker 不支持的功能。但是,您可以将 MirrorMaker 2 配置为在传统模式中使用。
9.1. MirrorMaker 2 数据复制 复制链接链接已复制到粘贴板!
跨集群的数据复制支持需要以下情况:
- 在系统失败时恢复数据
- 用于分析的数据聚合
- 对特定集群的数据访问限制
- 在特定位置置备数据以改进延迟
9.1.1. MirrorMaker 2 配置 复制链接链接已复制到粘贴板!
MirrorMaker 2 使用来自源 Kafka 集群的信息,并将其写入目标 Kafka 集群。
MirrorMaker 2 使用:
- 源集群配置使用来自源集群的数据
- 将数据输出到目标集群的目标集群配置
MirrorMaker 2 基于 Kafka Connect 框架,连接器 管理集群之间的数据传输。
您可以配置 MirrorMaker 2 以定义 Kafka Connect 部署,包括源和目标集群的连接详情,然后运行一组 MirrorMaker 2 连接器来进行连接。
MirrorMaker 2 由以下连接器组成:
MirrorSourceConnector-
源连接器将主题从源集群复制到目标集群。它还复制 ACL,且是
MirrorCheckpointConnector才能运行所必需的。 MirrorCheckpointConnector- checkpoint 连接器定期跟踪偏移。如果启用,它还会在源和目标集群之间同步消费者组偏移。
MirrorHeartbeatConnector- heartbeat 连接器会定期检查源和目标集群之间的连接。
如果您使用 User Operator 管理 ACL,则无法通过连接器进行 ACL 复制。
将数据从源集群镜像 (mirror)到目标集群的过程是异步的。每个 MirrorMaker 2 实例将数据从一个源集群镜像到一个目标集群。您可以使用多个 MirrorMaker 2 实例在任意数量的集群间镜像数据。
图 9.1. 在两个集群间复制
默认情况下,检查源集群中的新主题每 10 分钟进行。您可以通过在源连接器配置中添加 refresh.topics.interval.seconds 来更改频率。
9.1.1.1. 集群配置 复制链接链接已复制到粘贴板!
您可以在 主动/被动或主动/主动 集群配置中 使用 MirrorMaker 2。
- 主动/主动集群配置
- 主动/主动配置有两个活跃集群来复制数据。应用程序可以使用任一集群。每个集群都可以提供相同的数据。这样,您可以在不同的地理位置提供相同的数据。因为消费者组在两个集群中都活跃,复制主题的使用者偏移不会重新同步到源集群。
- 主动/被动集群配置
- 主动/被动配置具有主动集群,将数据复制到被动集群。被动集群保持待机状态。在系统失败时,您可以使用被动集群进行数据恢复。
预期的结构是,生成者和消费者仅连接到活跃集群。每个目标目的地都需要一个 MirrorMaker 2 集群。
9.1.1.2. 双向复制(active/active) 复制链接链接已复制到粘贴板!
MirrorMaker 2 架构支持 主动/主动 集群配置中的双向复制。
每个集群使用 source 和 remote 主题的概念复制其他集群的数据。由于同一主题存储在每个集群中,所以远程主题由 MirrorMaker 2 重命名,以表示源集群。原始集群的名称前面是主题名称的前面。
图 9.2. 主题重命名
通过标记原始集群,主题不会复制到该集群。
在配置需要数据聚合的架构时,通过 远程主题 复制的概念非常有用。消费者可以订阅同一集群中的源和远程主题,而无需单独的聚合集群。
9.1.1.3. 单向复制(active/passive) 复制链接链接已复制到粘贴板!
MirrorMaker 2 架构支持 主动/被动 集群配置中的单向复制。
您可以使用 主动/被动集群 配置进行备份或将数据迁移到另一个集群。在这种情况下,您可能不希望自动重命名远程主题。
您可以通过将 IdentityReplicationPolicy 添加到源连接器配置来覆盖自动重命名。应用此配置后,主题会保留其原始名称。
9.1.2. 主题配置同步 复制链接链接已复制到粘贴板!
MirrorMaker 2 支持源和目标集群之间的主题配置同步。您可以在 MirrorMaker 2 配置中指定源主题。MirrorMaker 2 监控源主题。MirrorMaker 2 会检测并将更改传播到源主题到远程主题。更改可能包括自动创建缺少的主题和分区。
在大多数情况下,您写入本地主题并从远程主题读取。虽然对于远程主题不会阻止写操作,但应该避免它们。
9.1.3. 偏移跟踪 复制链接链接已复制到粘贴板!
MirrorMaker 2 使用内部主题跟踪消费者组的偏移。
offset-syncs主题-
offset-syncs主题映射复制主题元数据的源和目标偏移。 checkpointstopic-
checkpoints主题映射源和目标集群中每个消费者组中复制的主题分区的最后提交偏移量。
与 MirrorMaker 2 内部使用的一样,您不直接与这些主题交互。
MirrorCheckpointConnector 发出偏移跟踪的 检查点。checkpoints 主题的偏移通过配置预先确定的间隔进行跟踪。两个主题都允许从故障转移上的正确偏移位置完全恢复复制。
offset-syncs 主题的默认位置是 源集群。您可以使用 offset-syncs.topic.location 连接器配置将其更改为 目标集群。您需要对包含该主题的集群进行读/写访问。使用目标集群作为 offset-syncs 主题的位置,即使您只对源集群具有读取访问权限,您也可以使用 MirrorMaker 2。
9.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 主题获取消费者组的远程偏移。
9.1.5. 连接检查 复制链接链接已复制到粘贴板!
MirrorHeartbeatConnector 发出 心跳 来检查集群之间的连接。
内部 心跳 主题从源集群复制。目标集群使用 heartbeat 主题检查以下内容:
- 连接器管理集群间的连接正在运行
- 源集群可用