【Kafka】深入了解Kafka

集群的成員關系

Kafka使用Zookeeper維護集群的成員信息

  • 每一個broker都有一個唯一的標識,這個標識可以在配置文件中指定,也可以自動生成。
  • broker在啟動時通過創建Zookeeper的臨時節點把自己的ID注冊到Zookeeper中。broker、控制器和其他一些動態系統工具會訂閱Zookeeper的 /brokers/ids 路徑;當有broker加入或退出集群時,會收到通知。
  • 當試圖啟動另一個具有相同ID的broker時,會收到錯誤信息。

控制器

控制器也是一個broker,除了提供一般broker功能外,還負責選舉分區首領

創建控制器

  • 集群中第一個啟動的broker會通過Zookeeper創建一個/controller的臨時節點讓自己成為控制器;
  • Zookeeper會為控制器分配一個epoch
  • 其他broker在啟動時,也會嘗試創建,但是因為已經存在他們會收到”節點已存在“異常;
  • 然后在控制器節點上創建Zookeeper watch,這樣就可以接收這個節點的變更通知。通過這樣的方式來保證節點只有一個控制器。
    image

變更控制器

  • 控制器關閉或者與Zookeeper斷開連接,這個臨時節點會消失;
  • 當其他節點收到控制器節點消失的通知時,會嘗試創建/controller的臨時節點成為控制節點;
  • 其他未創建成功的broker會在新的控制節點上創建Zookeeper watch
  • 新的控制器節點由Zookeeper分配一個數值更大的epoch。這樣做的目的是為了杜絕之前離線的控制器重新上線,并且發送消息,如果broker接收到消息的epoch小于監聽的則會忽略當前消息。
    image

新控制器 KRaft

用基于Raft的控制器替換基于Zookeeper的控制器。
集群即可以使用基于Zookeeper的傳統控制器,也可以使用KRaft

為什么替換控制器

  • 元數據是同步寫入Zookeeper的,但是異步發送給broker的,Zookeeper的接收更新也是異步的,會導致broker、控制器和Zookeeper之間元數據不一致的情況
  • 控制器在重新啟動時需要從Zookeeper讀取所有的broker和分區元數據,再將他們發給所有broker,隨著分區和broker的爭奪,重啟控制器會變慢。
  • 元數據所有權架構不夠好,有些操作通過控制器、有些通過broker、有些通過Zookeeper來完成
  • 使用Kafka需要對Zookeeper有一定了解,學習成本較高

Zookeeper主要功能

  • 用于選舉控制器
  • 保存集群元數據(broker、配置、主題、分區和副本)

KRaft

  • 新架構中控制器節點形成了一個Raft仲裁,管理元數據事件日志,這個日志包含了集群元數據的每一個變更,原先保存在Zookeeper中的所有東西(主題、分區、ISR、配置等)都保存在這個日志中。

  • 涉及直接與Zookeeper通信的客戶端和broker操作都通過控制器來路由,以達到無縫遷移。

  • 使用Raft算法,控制節點可以在不依賴外部系統情況下選舉首領,首領節點被稱為主控制器,負責處理來自所有broker的RPC的調用,跟隨者控制器從主控制器復制數據,并會作為主控制器的熱備,

  • 其他broker通過API從主控制器獲取更新,而不是等待通知。broker將自己注冊到控制器仲裁上,在注銷前會一直保持注冊狀態。

復制

復制是Kafka架構核心的一部分,之所以這么重要,是因為他可以在個別節點失效時仍能保證Kafka的可用性和持久性。

Kafka中每個主題有若干分區,每個分區可以有多個副本,副本均勻的分布在多個broker中。
副本有兩種類型

  • 首領副本:每個分區都有一個首領副本,為了保證一致性,所有生產者的請求都會經過這個副本。客戶端可以從首領副本或者跟隨者副本讀取數據
  • 跟隨者副本:除了首領副本以外都是跟隨者副本。沒特別指定,跟隨者副本不處理來自客戶端的請求,主要任務是從首領副本復制消息,保持與首領一致的狀態。

請求的處理

客戶端持有集群的元數據緩存,元數據中包含了客戶端感興趣的主題清單以及主題包含的分區、副本、首領等,一般情況下客戶端會直接向目標broker發送生產請求和獲取請求。

請求分類

  • 生產請求
  • 獲取請求
  • 管理請求

生產請求

生產者發送的請求,包含客戶端要寫入broker的消息

borker在接收到生產請求時會做一些驗證

  • 發送數據的用戶是否有寫入權限
  • 請求中acks參數是否有效
  • 如果acks=all是否足夠多的同步副本保證消息已經寫入
    消息寫入分區首領后,broker會檢查acks參數,等到所有的都完成后,會返回響應給客戶端。
    獲取請求

消費者和跟隨者副本發送的請求,用于從broker讀取消息。

broker接收到獲取請求時會做一些校驗

  • 請求指定的偏移量是否存在
    客戶端讀取消息時,Kafka使用零復制技術向客戶端發送消息。也就是說Kafka會直接把消息從文件里發送到網路通道,不經過任何緩沖區。
    客戶端能讀取的消息是已經被寫入所有同步副本的消息;部分沒有完全同步給所有副本的消息是不會發送給消費者的。

管理請求

管理客戶端發送的請求,用于執行元數據操作,比如創建和刪除topic

存儲

分層存儲

  • 本次存儲:與當前存儲一致,保存在broker機器上
    • 優勢:響應快
    • 劣勢:成本高、數據保留時間短
  • 遠程存儲:利用HDFS、S3等存儲系統來存儲日志信息
    • 優勢:成本低于本地存儲、數據可保留較長時間
    • 劣勢:響應較慢

文件管理

數據保留是Kafka的一個重要概念

  • Kafka中一個分區會分為若干片段
  • 默認每個片段包含1GB或者1周的數據,觸發任意上限,會關閉當前文件,重新打開一個文件
  • 正在寫入的片段叫做活動片段,活動片段不會被刪除。

壓實

保留每個鍵的最新有效數據,同時清理歷史冗余的數據。

  • 保留最新值:對于每條消息,如果指定了 Key,Kafka 會為每個 Key 保留最后一個寫入的 Value(最新狀態)。
  • 刪除冗余記錄:所有舊版本的 Key-Value 對會被標記為可刪除(邏輯刪除),但物理刪除會在后臺異步完成。
  • 非鍵消息的保留:沒有 Key 的消息(或 Key 為 null 的消息)不會被壓實,仍然遵循基于時間或大小的保留策略(例如 7 天后刪除)。

什么時候壓實主題

  • 通過log.cleaner.enabled參數啟動壓實線程,線程會選擇渾濁率最高的分區來壓實。
  • 默認情況下會在主題中有50%數據包含臟記錄時進行壓實。
  • 每個日志片段分為兩個部分
    • 干凈的部分:被壓實過的消息,每個鍵只有一個對應得值,是上一次壓實保留下來得
    • 渾濁部分:上一次壓實之后寫入得
      image

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898504.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898504.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898504.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#使用SnsPictureBox.dll繪制點,線段、圓、折線、多邊形、測量尺等多種圖形。

CSDN下載地址:https://download.csdn.net/download/sns1991sns/87726867 gitee下載地址:https://gitee.com/linsns/SnsPictrueBox 支持2種繪制方式:響應式和等待式。 一、使用響應式繪制圖形 1、在窗口構造函數里添加繪制圖形的完成響應函數 public…

Hugging Face預訓練GPT微調ChatGPT(微調入門!新手友好!)

Hugging Face預訓練GPT微調ChatGPT(微調入門!新手友好!) 在實戰中,?多數情況下都不需要從0開始訓練模型,?是使?“??”或者其他研究者開源的已經訓練好的?模型。 在各種?模型開源庫中,最…

Redis BitMap 用戶簽到

Redis Bitmap Bitmap(位圖)是 Redis 提供的一種用于處理二進制位(bit)的特殊數據結構,它基于 String 類型,每個 bit 代表一個布爾值(0 或 1),可以用于存儲大規模的二值狀…

Spring Boot 3 新特性實戰:從理論到實踐

引言 Spring Boot 自發布以來,憑借其簡潔的配置和強大的功能,迅速成為 Java 開發者的首選框架。隨著 Spring Boot 3 的發布,開發者們迎來了更多令人興奮的新特性。本文將深入探討 Spring Boot 3 的新特性,并通過實戰示例展示如何…

Nodejs使用redis

框架:koa,通過koa-generator創建 redis: 本地搭建,使用默認帳號,安裝說明地址以及默認啟動設置:https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 中間件&#x…

調研報告:Hadoop 3.x Ozone 全景解析

Ozone 是 Hadoop 的分布式對象存儲系統,具有易擴展和冗余存儲的特點。 Ozone 不僅能存儲數十億個不同大小的對象,還支持在容器化環境(比如 Kubernetes)中運行。 Apache Spark、Hive 和 YARN 等應用無需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…

AI學習——卷積神經網絡(CNN)入門

作為人類,我們天生擅長“看”東西:一眼就能認出貓狗、分辨紅綠燈、讀懂朋友的表情……但計算機的“眼睛”最初是一片空白。直到卷積神經網絡(CNN)?的出現,計算機才真正開始理解圖像。今天,我們就用最通俗的…

除自身以外數組的乘積——面試經典150題(力扣)

題目 給你一個整數數組 nums,返回 數組 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法,且在 O(n) 時…

?算法OJ?二叉樹的前序遍歷【樹的遍歷】(C++實現)Binary Tree Preorder Traversal

?算法OJ?二叉樹的中序遍歷【樹的遍歷】(C實現)Binary Tree Inorder Traversal Given the root of a binary tree, return the preorder traversal of its nodes’ values. Example 1: Input: root [1,null,2,3] Output: [1,2,3]Explanation: Exam…

計算機二級MS之Excel

聲明:跟著大貓和小黑學習隨便記下一些筆記供大家參考,二級考試之前將持續更新,希望大家二級都能輕輕松松過啦,過了二級的大神也可以在評論區留言給點建議,感謝大家!! 文章目錄 考題難點&#x…

【Linux】VMware Workstation Pro 17 安裝教程

目錄 安裝 VMware Workstation Pro 17 一、CDS Repository 獲取安裝包 二、網盤獲取安裝包 三、Broadcom官方獲取安裝包 后續安裝過程沒啥特殊要求 安裝 VMware Workstation Pro 17 目前VMware Workstation pro 17已經對個人用戶免費開放使用。 Broadcom官網地址&#x…

如何在云端平臺上建立 30,000 名用戶的網頁 MMO游戲環境-2 (服務器)

接續上一篇「如何在云端平臺上建立 30,000 名用戶的網頁 MMO游戲環境」,接下來討論模擬連結上的問題。 最初計劃使用35臺伺服器來完成這個實驗,希望能夠有大量的用戶連接,以驗證真實的連接狀況。然而,我們高估了這方面&#xff0c…

架構設計的靈魂交響曲:系統設計各維度的深度解析與實戰指南

引言: 系統設計的背景與重要性 在快速變化的技術環境中,數字化轉型成為企業生存與發展的核心驅動力。系統設計能力不僅是技術團隊的核心競爭力,也是推動業務創新和提升整體效率的關鍵因素。根據Gartner的研究,超過70%的數字化轉型項目未能實…

C語言指針(詳細總結)

目錄 1.初始C指針 幾個重要的概念: 指針的加減 &與* 二級指針 2.指針與數組 指針數組 數組指針變量 一維數組與二維數組傳參的本質 ?編輯?編輯 ?編輯 3.指針與函數 函數指針數組 4.指針與結構體 5.野指針以及常見的內存管理錯誤 常見的內存錯…

JAVA學習-練習試用Java實現“編寫一個Spark程序,結合Elasticsearch對大數據進行全文搜索和篩選“

問題: 編寫一個Spark程序,結合Elasticsearch對大數據進行全文搜索和篩選。 解答思路: 為了編寫一個結合Apache Spark和Elasticsearch進行全文搜索和篩選的程序,你需要按照以下步驟操作: 1. 設置Spark環境:…

VLLM專題(二十一)—分布式推理與服務

1. 如何決定分布式推理策略? 在深入探討分布式推理和服務之前,我們首先需要明確何時使用分布式推理以及可用的策略是什么。常見的做法如下: 單 GPU(無需分布式推理): 如果你的模型可以放入單個 GPU 中,那么你可能不需要使用分布式推理。直接使用單個 GPU 運行推理即可。…

torcharrow gflags版本問題

問題描述 其實仍然是很簡單的編譯問題,但是又弄了一整個下午加幾乎整個晚上,進度緩慢,又吸取了教訓,因而還是來記錄一下。 在試圖使用torcharrow進行推薦系統模擬的時候,撰寫的python程序報錯:ERROR: flag…

介紹一下TiDB、RocksDb、levelDB、LSM 樹、SSTable。

LSM 樹(Log-Structured Merge-Tree) 核心原理:通過將隨機寫轉換為順序寫優化寫入性能,適用于寫密集型場景。數據首先寫入內存中的 MemTable(有序結構,如跳表),當達到閾值后轉為 Imm…

ESP32 BLE 初步學習筆記

前言 藍牙作為一個龐大的知識體系,其學習和運用對于初學者來說顯得有些復雜且凌亂。我整理了這段時間的學習筆記,涵蓋了協議棧、工作流程、參數等內容。在實際應用中,我們主要使用 GAP 和 GATT,協議棧中的其他部分只需了解即可。…

dfs(二十四)47. 全排列 II

47. 全排列 II 給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。 示例 1: 輸入:nums [1,1,2] 輸出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 輸入:nums [1,2,3] 輸出:[[1,…