8.2. 集群配置
您可以在主动/被动或主动/主动集群配置中使用 MirrorMaker 2.0。
- 在主动/主动配置中,两个集群都处于活跃状态,并同时提供相同的数据,如果您需要在不同地理位置的本地都提供相同的数据,这个配置非常有用。
- 在主动/被动配置中,主动集群中的数据会在被动集群被复制,后者处于待机状态(例如在系统失败时进行数据恢复)。
预期的结构是,生成者和消费者仅连接到活跃集群。
每个目标目的地都需要一个 MirrorMaker 2.0 集群。
8.2.1. 双向复制(主动/主动) 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 架构支持主动/主动集群配置中双向复制。
每个集群使用 source 和 remote 主题的概念复制其他集群的数据。因为每个集群中存储相同的主题,远程主题由 MirrorMaker 2.0 自动重命名,以代表源集群。原始集群的名称前面是主题名称的前面。
图 8.2. 主题重命名
通过标记原始集群,主题不会复制到该集群。
在配置需要数据聚合的架构时,通过 远程主题 复制的概念非常有用。消费者可以订阅同一集群中的源和目标主题,而无需单独的聚合集群。
8.2.2. 单向复制(主动/被动) 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 架构支持主动/被动集群配置中的单向复制。
您可以使用 主动/被动集群 配置来备份或将数据迁移到另一个集群。在这种情况下,您可能不希望自动重命名远程主题。
您可以通过将 IdentityReplicationPolicy
添加到源连接器配置来覆盖自动重命名。应用此配置后,主题会保留其原始名称。
8.2.3. 主题配置同步 复制链接链接已复制到粘贴板!
主题配置在源和目标集群之间自动同步。通过同步配置属性,对重新平衡的需求会减少。
8.2.4. 数据完整性 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 监控源主题,并将任何配置更改传播到远程主题,检查并创建缺少的分区。只有 MirrorMaker 2.0 可以写入远程主题。
8.2.5. 偏移跟踪 复制链接链接已复制到粘贴板!
MirrorMaker 2.0 使用内部主题跟踪消费者组的偏移。
- offset-syncs 主题从记录元数据映射复制主题分区的源和目标偏移
- checkpoints 主题映射源和目标集群中每个消费者组中复制的主题分区的最后提交偏移量
checkpoints 主题的偏移通过配置以预先确定的间隔进行跟踪。这两个主题都允许从故障转移上的正确偏移位置完全恢复复制。
MirrorMaker 2.0 使用其 MirrorCheckpointConnector
为偏移跟踪发送 检查点。
offset-syncs 主题的位置是 源集群
。您可以使用 offset-syncs.topic.location
连接器配置将其更改为 目标集群
。您需要对包含该主题的集群进行读/写访问。使用目标集群作为 offset-syncs 主题的位置,您也可以使用 MirrorMaker 2.0,即使您只有对源集群的读访问权限。
8.2.6. 同步消费者组偏移 复制链接链接已复制到粘贴板!
__consumer_offsets
主题存储每个消费者组的提交偏移信息。偏移同步会定期将源集群的消费者组的使用者偏移转移到目标集群的使用者偏移量中。
偏移同步在主动/被动配置中特别有用。如果主动集群停机,消费者应用程序可以切换到被动(standby)集群,并从最后一个传输的偏移位置获取。
要使用主题偏移同步,请通过将 sync.group.offsets.enabled
添加到检查点连接器配置来启用同步,并将属性设置为 true
。默认情况下禁用同步。
在源连接器中使用 IdentityReplicationPolicy
时,还必须在检查点连接器配置中进行配置。这样可确保为正确的主题应用镜像的消费者偏移。
消费者偏移仅在目标集群中未激活的消费者组同步。
如果启用,则会定期从源集群同步偏移。您可以通过在检查点连接器配置中添加 sync.group.offsets.interval.seconds
和 emit.checkpoints.interval.seconds
来更改频率。属性指定同步消费者组偏移的频率,以及为偏移跟踪发送检查点的频率。这两个属性的默认值为 60 秒。您还可以使用 refresh.groups.interval.seconds
属性更改检查新消费者组的频率,该属性默认为每 10 分钟执行。
由于同步基于时间,因此消费者到被动集群的任何切换都可能会导致一些消息重复。
8.2.7. 连接检查 复制链接链接已复制到粘贴板!
一个 心跳 内部主题检查集群间的连接。
heartbeat 主题从源集群复制。
目标集群使用该主题来检查:
- 管理集群间连接运行的连接器
- 源集群可用
MirrorMaker 2.0 使用其 MirrorHeartbeatConnector
发送 执行这些检查的心跳。