【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
英文地址,請注明出處:http://en.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…