当前位置: 首页 > web >正文

Kafka跨机房双活方案中MM1与MM2

📊 一、MirrorMaker 1.0(MM1)

⚙️ 核心架构
  • 基础模型:基于“Consumer + Producer”组合,单向同步数据。
  • 部署模式
    • 单向同步:集群A → 集群B(需手动配置主题映射)。
    • 双向同步:需部署两套独立实例(如A→B和B→A),通过主题重命名(如添加DC1_DC2_后缀)避免循环复制。
  • 关键问题
    • 消息循环:相同主题双向同步需业务层过滤或依赖外部工具(如mirrormaker_topic_rename)。
    • 静态配置:白名单/黑名单更新需重启服务,引发数据堆积和吞吐风暴。
    • Offset管理缺失:目标集群无法继承源集群的消费位移,故障切换时需重新消费或依赖时间戳(导致重复数据)。
⚠️ 缺陷总结
问题影响
配置不可动态更新运维复杂,扩容需新增N×(N-1)个实例
频繁Rebalance网络波动时同步延迟波动大
无ACL/配置同步需手动维护目标集群权限
仅支持至少一次语义数据重复风险高

🚀 二、MirrorMaker 2.0(MM2)

⚙️ 架构升级
  • 基础模型:基于Kafka Connect框架,整合Source/Sink Connector,支持复杂拓扑(双活、聚合、链式同步)。
  • 核心组件
    • MirrorSourceConnector:同步数据及Topic配置。
    • MirrorCheckpointConnector:同步Consumer Group Offset(通过__checkpoint内部Topic映射位移)。
    • MirrorHeartbeatConnector:监控同步链路健康度。
  • 动态能力
    • 自动检测新Topic/分区,通过REST API动态更新同步规则(无需重启)。
    • 自动同步ACL权限(WRITE权限除外)。
🔧 双活方案实现
MM2同步
MM2同步
写入TopicX
写入TopicX
订阅.*.TopicX
订阅.*.TopicX
DC_B.TopicX
DC_A.TopicX
Consumer
  • 防循环复制:自动添加集群别名前缀(如DC_A.TopicX),过滤本地集群前缀消息。
  • 故障切换
    1. Producer切换写入目标集群。
    2. Consumer通过__checkpoint定位目标集群Offset,实现无缝续消费。
优势对比MM1
特性MM1MM2
部署复杂度高(N集群需N×(N-1)实例)低(N集群仅需N个实例)
Offset同步不支持通过offset_sync Topic映射
动态配置需重启生效REST API实时更新
数据一致性至少一次(重复率高)至少一次(支持EOS规划中)

🔧 三、部署实践

📦 MM2部署模式
模式适用场景特点
Connect集群模式生产环境(推荐)高可用,水平扩展
Dedicated集群模式独立资源池专用Driver管理任务
Standalone模式测试环境单Worker运行
⚙️ K8S部署示例(Strimzi Operator)
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:name: mm2-cluster
spec:version: 3.7.0connectCluster: "target-cluster"clusters:- alias: "source-cluster"bootstrapServers: kafka-source:9092- alias: "target-cluster"bootstrapServers: kafka-target:9092mirrors:- sourceCluster: "source-cluster"targetCluster: "target-cluster"sourceConnector:tasksMax: 4checkpointConnector:tasksMax: 1topicsPattern: ".*"groupsPattern: ".*"

⚠️ 四、局限性与演进

🔒 当前限制
  1. 仅至少一次语义:跨集群事务未原子化,可能重复(正开发EOS支持)。
  2. 同步性能:非对等复制场景需序列化/反序列化,吞吐受限(未来支持二进制流直传)。
⏭️ 演进方向
  • Exactly-Once语义(EOS):利用__checkpoint Topic与目标集群事务绑定。
  • 零拷贝同步:同配置集群间跳过数据处理环节,提升吞吐。

💎 总结:选型建议

  • MM1:仅适用于非关键业务的简单同步场景(如日志备份)。
  • MM2生产级双活方案首选,尤其适合要求:
    • 动态扩缩容
    • 精确Offset恢复
    • 自动化运维
    • 复杂拓扑(如多活、聚合)
http://www.xdnf.cn/news/17727.html

相关文章:

  • 新型Windows RPC攻击可劫持服务并完全攻陷Active Directory,PoC已公开
  • 开发npm包【详细教程】
  • 测试匠谈 | AI语音合成之大模型性能优化实践
  • 【c++】反向赋值:颠覆传统的数据交互范式
  • HeidiSQL 连接 MySQL 报错 10061
  • 工业相机终极指南:驱动现代智能制造的核心“慧眼”
  • mimiconda+vscode
  • 基恩士FSN10系列数字光纤传感器全新型光纤放大器 FSN11CP
  • 後端開發技術教學(五) 魔術方法、類、序列化
  • Day02——Docker
  • Avalonia实例实战六:控件的拖放
  • 前端面试:promise...then与asnyc ...await
  • 【算法训练营Day23】贪心算法part1
  • 前端工程化:pinia
  • 分享一款基于STC8H8K32U-45I-LQFP48单片机的4路数字量输入输出模块
  • 当AI重塑世界:普通人如何成为“主动进化者”?
  • 第16届蓝桥杯Python青少组_省赛_中/高级组_2025年5月真题
  • VirtualBox虚拟机网卡配置
  • LeetCode 2438.二的幂数组中查询范围内的乘积:模拟(前缀和可选)
  • Ansible 面试题 20250811
  • ansible学习第一天
  • 逐际动力开源运控 tron1-rl-isaacgym 解读与改进
  • 聊天室全栈开发-保姆级教程(Node.js+Websocket+Redis+HTML+CSS)
  • 当C#遇上Notepad++:实现GCode可视化编辑的跨界实践
  • ArkUI中的自定义组件(一)
  • 【MYSQL】MySQL中On duplicate key update
  • FlinkSql(详细讲解一)
  • Dify入门指南(2):5 分钟部署 Dify:云服务 vs 本地 Docker
  • Speech Databases of Typical Children and Children with SLI 数据集解读
  • Vue 中的 Class 与 Style 绑定详解1