kafka的文章

1.面試的問題

  • 要點 至多一次、恰好一次
  • 數據一致性
  • 超時重試、冪等
  • 消息順序
  • 消息擠壓
  • 延時消息

1.1 kafaka 生產消息的過程。

在消息發送的過程中,涉及到了兩個線程,一個是main 線程,一個是sender 線程。在main 線程中創建了一個雙端隊列 RecordAccumulator,main 線程將消息發送到 雙端隊列,sender 線程不斷從雙端隊列讀取 發送到 broker

1.2 消息隊列的可靠性。

1.3 副本同步機制

leo: 定義:LEO 即日志末端偏移量,它表示每個副本日志中最后一條消息的下一個偏移量。
hw:高水位(HW,High Watermark)的確是 ISR(In - Sync Replicas,同步副本集合)中所有副本的最小日志末端偏移量(LEO,Log End Offset)
Kafka 的副本同步機制
Kafka 的副本同步機制是保障數據可靠性和高可用性的核心特性,下面從整體架構、同步流程、ISR 機制、相關參數等方面進行詳細介紹。
整體架構

  • Kafka 中每個分區都有一個 Leader 副本和多個 Follower 副本。生產者和消費者只與 Leader 副本進行交互,Follower 副本負責從 Leader 副本同步數據。這樣的設計使得 Kafka 可以在多個 Broker 上存儲數據副本,提高數據的容錯能力。
    同步流程
  1. 消息生產
    生產者將消息發送到 Kafka 集群時,會指定要發送到的主題和分區。Kafka 根據分區的 Leader 副本位置,將消息發送到對應的 Leader 副本所在的 Broker。
  2. Leader 副本接收消息
    Leader 副本接收到生產者發送的消息后,將消息寫入本地日志,并更新自身的日志末端偏移量(LEO)。
  3. Follower 副本同步消息
    Follower 副本通過向 Leader 副本發送 Fetch 請求來同步消息。Fetch 請求中包含 Follower 副本當前的 LEO,Leader 副本根據該信息將新的消息發送給 Follower 副本。
    Follower 副本接收到消息后,將消息寫入本地日志,并更新自身的 LEO。
  4. 高水位(HW)更新
    高水位(HW)是分區中所有副本都已經成功復制的消息的最大偏移量。Kafka 會根據 ISR(In - Sync Replicas,同步副本集合)中所有副本的 LEO 來更新 HW。具體來說,HW 是 ISR 中最小的 LEO。
    只有偏移量小于 HW 的消息才被認為是已經在所有同步副本中安全保存的,可以被消費者消費。
    ISR 機制
  5. ISR 定義
    ISR 是與 Leader 副本保持同步的一組副本集合。只有在 ISR 中的副本,才被認為是可靠的同步副本,能夠參與 HW 的計算。
  6. ISR 動態維護
    Kafka 會定期檢查 Follower 副本與 Leader 副本的同步情況,通過比較 LEO 的差距來判斷 Follower 副本是否落后。如果 Follower 副本的 LEO 與 Leader 副本的 LEO 差距超過一定閾值(由 replica.lag.time.max.ms 參數控制),則該 Follower 副本會被從 ISR 中移除。
    當落后的 Follower 副本追上 Leader 副本后,它可以重新加入 ISR。
  7. ISR 的作用
    提高數據可靠性:只有 ISR 中的副本參與 HW 的計算,確保消費者只能讀取到已經在多個副本中安全保存的消息。
    故障轉移:當 Leader 副本出現故障時,Kafka 會從 ISR 中選舉出新的 Leader 副本,保證數據的一致性和服務的連續性。
    相關參數
  8. acks 參數
    該參數用于控制生產者發送消息時的確認機制,影響副本同步策略。
    acks = 0:生產者發送消息后,不等待任何確認,相當于異步復制,性能最高但數據可靠性最低。
    acks = 1:生產者發送消息后,等待 Leader 副本確認,只要 Leader 副本寫入成功就返回響應,性能和可靠性適中。
    acks = all 或 acks = -1:生產者發送消息后,等待所有 ISR 中的副本確認,相當于同步復制,數據可靠性最高但性能最低。
  9. min.insync.replicas 參數
    用于指定 ISR 中最少需要有多少個副本同步消息,才能認為消息寫入成功。結合 acks = all 使用時,可以進一步增強數據的可靠性。如果 ISR 中的副本數量小于 min.insync.replicas,生產者發送消息時會收到寫入失敗的響應。
  10. replica.lag.time.max.ms 參數
    該參數定義了 Follower 副本與 Leader 副本之間允許的最大延遲時間。如果 Follower 副本在該時間內沒有向 Leader 副本發送 Fetch 請求或者沒有追上 Leader 副本的 LEO,則會被從 ISR 中移除。
    異常情況處理
  11. Leader 副本故障
    當 Leader 副本所在的 Broker 出現故障時,Kafka 會從 ISR 中選舉出新的 Leader 副本。新的 Leader 副本會將 HW 作為新的起始偏移量,繼續處理生產者和消費者的請求。
  12. Follower 副本故障
    如果某個 Follower 副本出現故障,它會被從 ISR 中移除。當該副本恢復正常后,會重新向 Leader 副本發送 Fetch 請求,追趕 Leader 副本的進度,當追上后可以重新加入 ISR。
    綜上所述,Kafka 的副本同步機制通過 Leader - Follower 架構、ISR 機制和相關參數的配置,在保證數據可靠性和高可用性的同時,兼顧了性能和容錯能力。

1.4 kafka 高性能、高吞吐原因

  • 磁盤順序讀寫
    • 順序讀 會使用預讀
    • 保證了消息的堆積 相比于內存。
  • 使用了零拷貝的技術
  • 分區分段 + 索引
    • 每個 分區 在磁盤上 按照segment 文件存儲的。針對segment 建立.index的索引文件
  • 批量壓縮 多條消息批量壓縮傳輸,降低帶寬
  • 批量讀寫

1.5 消息丟失的場景 解決方案

  1. ack=all,
  2. 配置 min.insync.replicas>1

1.6 消息可靠性的解決方案

消息發送

  • ack -1/all 、
  • unclean.leader.election.enable: false, 禁止選舉 isr 以外的follower為leader
  • tries >1 重試次數
  • min.insync.replicas>1 同步副本數,沒滿足該之前,不提供 讀寫服務。
    綜上所述,在 acks = all 且 min.insync.replicas = 3,副本總數為 5 個的情況下,至少 3 個處于 ISR 中的副本寫入數據完成,Kafka 才會判定消息寫入操作完成。

消費者

  • 手動提交 offset
  • broker 減少刷盤間隔
  • 事務消息

1.7 kafka reblance

  • 消費者分區策略
  1. range 范圍分區 默認
  2. roundrobin 輪詢
  3. sticky 策略 體現在 reblance 策略下。
  • 觸發reblance 的時間
  1. 消費者組成員個數變化的時候。 有新的消費者加入、離開消費者組
  2. 訂閱的topic 發生變化
  3. 訂閱topic 的分區發生變化
  • coordinator 協調過程
  1. 消費者 找到消費者組中的 協調器
  2. 確定分區策略

system design interview 書

第八章 設計短鏈系統

kafka 筆記

尚硅谷-筆記

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

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

相關文章

以mysql 為例,增刪改查語法及其他高級特性

以下是 MySQL 的 增刪改查語法及 高級特性的詳細整理,結合示例說明: 1. 基礎操作(CRUD) (1) 創建數據(INSERT) -- 單條插入 INSERT INTO users (id, name, email) VALUES (1, Alice, aliceexample.com);…

Postman最新詳細安裝及使用教程【附安裝包】

一、Postman介紹 ?Postman是一個功能強大的API測試工具,主要用于模擬和測試各種HTTP請求,支持GET、POST、PUT、DELETE等多種請求方法。?通過Postman,用戶可以發送請求并查看返回的響應,檢查響應的內容和狀態,從而驗…

第十三章 : Names in Templates_《C++ Templates》notes

Names in Templates 重難點多選題設計題 重難點 1. 名稱分類與基本概念 知識點: 限定名(Qualified Name):使用::或.顯式指定作用域的名稱(如std::vector)非限定名(Unqualified Name&#xff0…

整合vue+Element UI 開發管理系統

1、 安裝 Node.js 和 npm 確保安裝了 Node.js 和 npm。可以通過 Node.js 官網 下載。 2、 創建 Vue 項目 安裝cli npm install -g vue/cli 使用 Vue CLI 創建一個新的 Vue 項目。 vue create admin-system cd admin-system npm run serve 出現這個頁面表示vue創建成功 安…

3. 軸指令(omron 機器自動化控制器)——>MC_Stop

機器自動化控制器——第三章 軸指令 9 MC_Stop變量?輸入變量?輸出變量?輸入輸出變量 功能說明?指令詳情?時序圖?重啟運動指令?多重啟動運動指令?異常 MC_Stop 使軸減速停止。 指令名稱FB/FUN圖形表現ST表現MC_Stop強制停止FBMC_Stop_instance (Axis :《參數》 ,Execu…

C#中修飾符——abstract、virtual

一、多態簡介 在面向對象編程的過程中,多態體現出來的是【一個接口,多個功能】;多態性體現在2個方面: 1、程序運行時,在方法參數、集合或數組等位置,派生類對象可以作為基類的對象處理;這樣該對…

Spring Boot + Spring Integration整合MQTT打造雙向通信客戶端

1. 概述 本文分兩個章節講解MQTT相關的知識,第一部份主要講解MQTT的原理和相關配置,第二個章節主要講和Spring boot的integration相結合代碼的具體實現,如果想快速實現功能,可直接跳過第一章節查看第二章講。 1.1 MQTT搭建 為了…

2025前端面試題記錄

vue項目目錄的執行順序是怎么樣的? 1、package.json   在執行npm run dev時,會在當前目錄尋找package.json文件,此文件包含了項目的名稱版本、項目依賴等相關信息。 2、webpack.config.js(會被vue-cli腳手架隱藏) 3、vue.config.js   對…

專題|Python貝葉斯網絡BN動態推理因果建模:MLE/Bayes、有向無環圖DAG可視化分析呼吸疾病、汽車效能數據2實例合集

原文鏈接:https://tecdat.cn/?p41199 作為數據科學家,我們始終在探索能夠有效處理復雜系統不確定性的建模工具。本專題合集系統性地解構了貝葉斯網絡(BN)這一概率圖模型在當代數據分析中的創新應用,通過開源工具bnlea…

WX小程序

下載 package com.sky.utils;import com.alibaba.fastjson.JSONObject; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.Cl…

Vulnhub-wordpress通關攻略

姿勢一、后臺修改模板拿WebShell 第一步:進?Vulhub靶場并執?以下命令開啟靶場;在瀏覽器中訪問并安裝好.... 第二步:找到外觀--編輯--404.php,將原內容刪除并修改為一句話木馬,點擊更新--File edited successfully. &…

Spring Boot(十六):攔截器Interceptor

攔截器的簡介 攔截器(Interceptor)?是Spring框架中的概?念,它同樣適?用于Spring Boot,?因為Spring Boot是基于Spring框架的。攔截器是?一種AOP(面向切面編程)?的輕量級實現方式,它允許我…

Kotlin v2.1.20 發布,標準庫又有哪些變化?

大家吼哇!就在三小時前,Kotlin v2.1.20 發布了,更新的內容也已經在官網上更新:What’s new in Kotlin 2.1.20 。 我粗略地看了一下,下面為大家選出一些我比較感興趣、且你可能也會感興趣的內容。 注意!這里…

開源鏈動2+1模式、AI智能名片與S2B2C商城小程序源碼在社交電商渠道拓寬中的協同應用研究

摘要:本文基于"開源鏈動21模式""AI智能名片""S2B2C商城小程序源碼"三大技術要素,探討社交電商時代商家渠道拓寬的創新路徑。通過解析各技術的核心機制與應用場景,結合京東便利店等實際案例,論證其對…

【藍橋杯速成】| 10.回溯切割

前面兩篇內容我們都是在做有關回溯問題的組合應用 今天的題目主題是:回溯法在切割問題的應用 題目一:分割回文串 問題描述 131. 分割回文串 - 力扣(LeetCode) 給你一個字符串 s,請你將 s 分割成一些 子串&#xff…

【嵌入式硬件】三款DCDC調試筆記

關于開關電源芯片,重點關注輸入電源范圍、輸出電流、最低壓降。 1.MP9943: 以MP9943為例,輸入電壓范圍4-36V,輸出最大電流3A,最低壓降為0.3V 調整FB使正常輸出為5.06V 給定6V空載、5V空載、5V帶2A負載的情況: 6V帶2A…

2025年03月18日柯萊特(外包寧德)一面前端面試

目錄 自我介紹你怎么從0到1搭建項目的webpack 的構建流程手寫webpack插件你有什么想問我的嗎 2. 你怎么從 0 到 1 搭建項目的 在面試中回答從 0 到 1 搭建前端項目,可按以下詳細步驟闡述: 1. 項目前期準備 需求理解與分析 和產品經理、客戶等相關人…

在vitepress中使用vue組建,然后引入到markdown

在 VitePress 中&#xff0c;每個 Markdown 文件都被編譯成 HTML&#xff0c;而且將其作為 Vue 單文件組件處理。這意味著可以在 Markdown 中使用任何 Vue 功能&#xff0c;包括動態模板、使用 Vue 組件或通過添加 <script> 標簽為頁面的 Vue 組件添加邏輯。 值得注意的…

Jupyter Notebook 常用命令(自用)

最近有點忘記了一些常見命令&#xff0c;這里就記錄一下&#xff0c;懶得找了。 文章目錄 一、文件操作命令1. %cd 工作目錄2. %pwd 顯示路徑3. !ls 列出文件4. !cp 復制文件5. !mv 移動或重命名6. !rm 刪除 二、代碼調試1. %time 時間2. %timeit 平均時長3. %debug 調試4. %ru…

Java面試黃金寶典12

1. 什么是 Java 類加載機制 定義 Java 類加載機制是 Java 程序運行時的關鍵環節&#xff0c;其作用是把類的字節碼文件&#xff08;.class 文件&#xff09;加載到 Java 虛擬機&#xff08;JVM&#xff09;中&#xff0c;并且將字節碼文件轉化為 JVM 能夠識別的類對象。整個類…