【Note】《Kafka: The Definitive Guide》 第8章: Cross-Cluster Data Mirroring

《Kafka: The Definitive Guide》 第8章: Cross-Cluster Data Mirroring

一、跨集群镜像的场景与价值

  1. 多区域低延迟访问

    • 将业务数据从主集群实时复制到多个地理区域的集群,缩短消费者跨区读取延迟。
  2. 灾备切换

    • 当主集群出现故障时,可快速将消费流量切换到镜像集群,确保业务连续性。
  3. 集群升级与迁移

    • 在不中断生产环境的前提下,向新集群同步全量与增量数据,实现平滑迁移。
  4. 合规与隔离

    • 不同地域或部门的数据隔离需求,可在各自集群中维护副本,满足安全与法规要求。

二、MirrorMaker 2 体系架构回顾

MirrorMaker 2(以下简称 MM2)基于 Kafka Connect 框架扩展而来,核心组件包括:

  • Source Cluster Connector:在源集群消费指定 topics。
  • Target Cluster Connector:以生产者身份将消息写入目标集群。
  • Heartbeat Topic:用于检查跨集群链路健康。
  • Checkpoint Topic:跟踪镜像进度,确保精准无漏。
  • Replication Policy:控制在目标集群中 Topic、Group ID、ACL 等命名转换与权限映射。

其运行流程大致为:

  1. MM2 从源集群的 __heartbeat__checkpoint 以及业务 topics 拉取消息。
  2. 根据 Replication Policy,将消息写入目标集群对应的镜像 topic(默认为 <sourceCluster>.<topic>)。
  3. 定期写入 checkpoint,方便故障重启后接续。
  4. 通过心跳机制监控链路状态,及时发现滞后或中断。

三、详细配置解读

以下示例配置展示了一个从集群 A ➔ B 的单向镜像,以及双向互镜的关键选项。

# mm2-cluster.properties
clusters = A, B# 集群 A 配置
A.bootstrap.servers = a1:9092,a2:9092
# 集群 B 配置
B.bootstrap.servers = b1:9092,b2:9092# 单向镜像:A ➔ B
A->B.enabled = true
A->B.topics = orders, payments      # 指定需要镜像的 topics 列表或正则
A->B.sync.topic.configs = true      # 同步源端 topic 的所有配置
A->B.emit.heartbeats.enabled = true # 开启心跳消息
A->B.emit.checkpoints.enabled = true# 双向互镜(可选)
B->A.enabled = true
B->A.topics = .*
  • topics:支持逗号分隔、通配符正则或 .*(全部)。
  • sync.topic.configs:建议开启,确保分区数、压缩方式等一致。
  • replication.policy.class:可自定义命名策略,如去除前缀、添加地域标识等。

启动命令:

bin/connect-mirror-maker.sh mm2-cluster.properties

四、镜像一致性与故障恢复

  1. Checkpoint 恢复

    • MM2 定期在源集群的 __checkpoint topic 写入偏移量,并在目标集群中消费,再将进度存至本地状态。
    • 重启后自动读取上次 checkpoint,继续从上次位置拉取,避免漏 / 重复。
  2. 心跳监控

    • __heartbeat topic 用于监测源集群是否活跃,以及链路健康度。
    • 可结合 Prometheus 抓取 kafka_mirrormaker2_heartbeat_lag 等指标,及时报警。
  3. 网络抖动与重试

    • MM2 继承 Kafka Connect 的重试机制:

      errors.retry.timeout = 600000     # 重试总时长(毫秒)
      errors.retry.delay.max.ms = 60000 # 最大重试间隔
      
    • 对于短暂的网络抖动或目标端不可用,自动重试,无需人工干预。


五、高级用例:多活与环形复制

  • 多活部署

    • 在多个机房同时开启 A⇄B、A⇄C、B⇄C 镜像,实现三活互备。
    • 需注意:环形复制易产生回环,必须开启 replication.policy.class = org.apache.kafka.connect.mirror.DefaultReplicationPolicy,并默认过滤已镜像的前缀。
  • 渐进式迁移

    1. 全量同步:先将历史数据复制到新集群。
    2. 增量镜像:开启 MM2 单向镜像,捕获实时写入。
    3. 切流:消费者切换到新集群后,停用原链路。

六、监控与调优

指标名称含义建议
checkpoint-lag已复制偏移与源端最新偏移的差值<1000 messages
heartbeat-latency心跳写入与消费的延迟<1s
replication-backlog待发送消息缓冲区大小根据带宽调优
task-poll-interval-msConnector 拉取轮询间隔10–100 ms
consumer/max-poll-records每次拉取消息数100–500
  • 带宽与并发:可通过 tasks.max 提升并行度,分散分区负载;
  • 压缩:开启生产端压缩(如 compression.type=snappy),减少网络传输量;
  • 安全:跨 DC 建议启用 TLS/SASL,配置 client.dns.lookup=use_all_dns_ipsconnections.max.idle.ms 保持稳定连接。

七、最佳实践总结

  1. 分离全量与增量

    • 对于历史数据量较大时,采用工具(如 kafka-replay-log-dirs)先行全量导入,再开启 MM2 进行增量镜像。
  2. 命名策略统一

    • 定制 replication.policy.class,将源集群标识、地区前缀或版本号统一加到 Topic 名称,便于追踪与管理。
  3. 定期故障演练

    • 模拟主集群故障或链路中断,验证镜像集群能否快速接管,检验监控告警与自动恢复流程。
  4. 流量切分

    • 对于高吞吐主题,可单独配置专属 MM2 进程,确保单一链路不因其他主题瓶颈拖慢。
  5. 权限与隔离

    • 使用 Kafka ACL,严控跨集群 MirrorMaker 的读写权限,防止误操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87905.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程

stable-diffusion webui 环境搭建目录 一、Windows 环境部署 stable-diffusion-webui1、准备条件2、安装Python 3.10.X&#xff08;**较新版本的 Python 不支持 torch**&#xff09;3、安装Git 教程4、使用Git 下载 stable-diffusion-webui 存储库&#xff0c;4.1、显示报错 5…

【深度学习】 深度学习训练配置参数详解

深度学习训练配置参数详解 1. 启动初始化参数说明CUDA_VISIBLE_DEVICES指定使用的GPU设备编号&#xff08;"0"表示单卡&#xff09;seed随机种子&#xff08;1777777&#xff09;&#xff0c;保证实验可复现性cuda是否启用GPU加速&#xff08;True&#xff09;benchm…

期望,积分,均值,求和的关系

1. 回顾期望的定义 对于连续性随机变量 X X X&#xff0c;期望为&#xff1a; E X ∼ f ( x ) [ X ] ∫ Ω x f ( x ) d x E_{X\sim f(x)}[X] \int_{\Omega}xf(x)dx EX∼f(x)​[X]∫Ω​xf(x)dx 其中 f ( x ) f(x) f(x)为概率密度函数&#xff0c; Ω \Omega Ω为概率密度函…

1.如何对多个控件进行高效的绑定 C#例子 WPF例子

使用ObservableCollection高效为多个控件绑定数据在WPF开发中&#xff0c;数据绑定是一个非常重要的功能&#xff0c;它允许我们将UI控件与数据源进行绑定&#xff0c;从而实现数据的自动更新。当需要为多个控件绑定数据时&#xff0c;使用ObservableCollection可以大大提高开发…

JSONLines和JSON数据格式使用教程

文章目录 一、核心区别二、JSONLines 的优势三、Python 中使用 JSONLines1. 写入 JSONLines 文件2. 读取 JSONLines 文件3. 处理大文件示例四、常见工具支持1. 命令行工具2. 编程语言库五、适用场景选择六、注意事项总结JSONLines(简称 jsonl 或 jl)和传统 JSON 都是用于存储…

链表算法之【反转链表】

目录 LeetCode-206题 LeetCode-206题 给定一个单链表的头节点&#xff0c;请反转链表&#xff0c;并返回反转后的链表 class Solution {public ListNode reverseList(ListNode head) {// checkif (head null || head.next null)return head;// 双指针ListNode p1 head;Li…

回溯题解——子集【LeetCode】输入的视角(选或不选)

78. 子集 ✅ 一、算法逻辑讲解&#xff08;逐步思路&#xff09; 逻辑讲解&#xff1a; dfs(i)&#xff1a;表示从下标 i 开始&#xff0c;做“选 or 不选”的子集构造。 终止条件 if i n&#xff1a; 到达数组末尾&#xff0c;表示一种完整子集构造完成。 把当前构造路径…

使用Electron开发跨平台本地文件管理器:从入门到实践

在当今数字化时代&#xff0c;文件管理是每个计算机用户日常工作中不可或缺的一部分。虽然操作系统都提供了自己的文件管理器&#xff0c;但开发一个自定义的文件管理器可以带来更好的用户体验、特定功能的集成以及跨平台的一致性。本文将详细介绍如何使用Electron框架构建一个…

JBHI 2025 | 潜在扩散模型赋能胸部X射线骨抑制

Abstract: 肺部疾病是全球健康面临的一项重大挑战&#xff0c;胸部 X 光检查&#xff08;CXR&#xff09;因其方便性和经济性而成为一种重要的诊断工具。 然而&#xff0c;CXR 图像中重叠的骨结构往往会阻碍肺部病变的检测&#xff0c;从而导致潜在的误诊。 为解决这一问题&am…

408第三季part2 - 计算机网络 - 计算机网络基本概念

理解然后区分一下这2个区别特点是建立连接存储转发的意思是A先发给B&#xff0c;B再发给C&#xff0c;就这样这里缺点比如A很大&#xff0c;你给B缓存开销大还需要排序然后形象的图题目分组头部要放一些源地址和目的地址这些东西以后发数据只会往近的发&#xff0c;不可能往下面…

互补功率放大器Multisim电路仿真——硬件工程师笔记

目录 1 互补功率放大器基础知识 1.1 工作原理 1.2 电路结构 1.3 优点 1.4 缺点 1.5 应用 1.6 总结 2 OCL乙类互补功率放大电路 2.1 电路结构 2.2 工作原理 2.3 优点 2.4 缺点 2.5 总结 3 OCL甲乙类互补功率放大电路 3.1 电路结构 3.2 工作原理 3.3 优点 3.4 …

【1】确认安装 Node.js 和 npm版本号

搭建前端项目时需要安装 Node.js 和 npm&#xff0c;主要是因为它们提供了一些重要的功能和工具&#xff0c;帮助开发者高效地开发、构建和管理项目。一、具体原因如下&#xff1a; Node.js&#xff1a;JavaScript 运行环境 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运…

7、从网络中获取数据

目录 订阅网络状态变化创建网络对象获取默认激活网络及其能力可订阅事件可订阅事件——网络可用事件可订阅事件——网络阻塞状态事件可订阅事件——网络能力变化事件可订阅事件——网络连接信息变化事件可订阅事件——网络丢失事件常见事件订阅场景 开发流程 使用HTTP访问网络发…

搭建个人博客系列--docker

因为后续所有的组件都会在docker上安装&#xff0c;所以要先安装docker。一、安装docker1.配置yumyum install -y yum-utilsyum makecache fast2.卸载老dockeryum remove docker3.配置镜像地址yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos…

【Note】《Kafka: The Definitive Guide》 第5章:深入 Kafka 内部结构,理解分布式日志系统的核心奥秘

《Kafka: The Definitive Guide》 第5章&#xff1a;深入 Kafka 内部结构&#xff0c;理解分布式日志系统的核心奥秘 Apache Kafka 在表面上看似只是一个“分布式消息队列”&#xff0c;但其背后的存储架构、分区机制、复制策略与高性能设计&#xff0c;才是它在千万级 TPS 场景…

当“漏洞”成为双刃剑——合法披露与非法交易的生死线在哪里?

首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 一、一场“漏洞”的博弈&#xff1a;从“手术刀”到“毒药”的分界 2025年夏&#xff0c;某电商平台因系统漏洞被曝光&#xff0c;引发舆论风暴。白帽子甲在发现漏洞后&#xff0c;第一时间联系平台技术团队&#xff0…

Hadoop 分布式存储与计算框架详解

Hadoop开发实战:https://www.borimooc.com/course/1004.htm hadoop是适合海量数据的分布式存储&#xff0c;和分布式计算的框架 hadoop有三大组件: mapreduce&#xff1a;适合海量数据的分布式计算&#xff0c;分为map阶段、shuffle阶段和reduce阶段hdfs&#xff1a;分布式文…

LeetCode 2099.找到和最大的长度为 K 的子序列:自定义排序

【LetMeFly】2099.找到和最大的长度为 K 的子序列&#xff1a;自定义排序 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-subsequence-of-length-k-with-the-largest-sum/ 给你一个整数数组 nums 和一个整数 k 。你需要找到 nums 中长度为 k 的 子序列 &#x…

循环移位网络设计

总体架构 模块描述 循环移位网络模块&#xff08;模块名&#xff1a;VAL_CS_PROC&#xff09;&#xff0c;对输入数据&#xff08;in_data&#xff09;做循环移位处理&#xff0c;两个cycle即可输出数据。 Fig 1 循环移位模块顶层 设计要求 00】 支持对data_num个有效数据做…

IO进程线程(IPC通讯)

目录 一、IPC通讯机制 1&#xff09;传统的通讯机制&#xff1a; 2&#xff09;systemV 的通讯机制&#xff1a; 3&#xff09;跨主机的通讯机制&#xff1a; 1、无名管道 1&#xff09;无名管道的概念 2&#xff09;无名管道的函数 3&#xff09;无名管道通讯&#xf…