kafka學習筆記(二)架構深入

2021-10-14 01:31:26 字數 1362 閱讀 2010

1、kafka的工作流程

kafka 中訊息是以 topic 進行分類的,生產者生產訊息,消費者消費訊息,都是面向 topic的。

2、kafka的儲存機制

kafka採取了分片和索引機制,每個partition分為多個segment。每個segment包含「0000***x.index」檔案和」0000***x.log「檔案,***x是當前segment第一條訊息的偏移量。這些檔案存在同乙個資料夾,資料夾命名規則:topic名稱+分割槽序號。

3、kafka生產者

分割槽的原因:

方便集群擴充套件,可以自定義partition的大小來適應集群大小;

可以提高併發,因為可以以partition為單位讀寫;

分割槽的原則:

partition的值;

無partition的值,有key,將key的hash值與partition的數量取餘得到partition的值;

無partition,無key,第一次呼叫時隨機生成乙個整數(後面每次呼叫在這個整數上自增),將這個值與 topic 可用的 partition 總數取餘得到 partition值,也就是常說的 round-robin 演算法。

資料可靠性

生產者傳送訊息到topic,topic的partition收到資料,會返回ack;

ack機制:

全部接受完,才傳送ack

isr(動態維護follower,時間閾值由replica.lag.time.max.ms決定)

ack應答機制

0 不需要返回ack

1 leader接受完,未等follower同步,就返回ack

-1 follower同步完,返回ack

故障處理(leo:每個副本最大的offset;hw:消費者見到的最大的offset,isr佇列中最小的leo)保證資料一致性,不保證資料不丟失或者不重複

follower故障

follower 的 leo 大於等於該 partition 的 的 hw

leader故障

截掉高於hw的資料

資料完整性(exactly once嚴格一次)

at least once + 冪等性 = exactly once

4、kafka消費者

消費方式:pull(拉)

分割槽分配策略

roundrobin(輪詢分割槽)

range(範圍分割槽,預設為此策略)

offset維護

kafka 0.9 版本之前,consumer 預設將 offset 儲存在 zookeeper 中,從 0.9 版本開始,

consumer 預設將 offset 儲存在 kafka 乙個內建的 topic 中,該 topic 為__consumer_offsets。

Kafka 04 架構深入 zookeeper

1 順序寫磁碟 kafka 的 producer 生產資料,要寫入到 log 檔案中,寫的過程是一直追加到檔案末端,為順序寫。官網有資料表明,同樣的磁碟,順序寫能到 600m s,而隨機寫只有 100k s。這與磁碟的機械機構有關,順序寫之所以快,是因為其省去了大量磁頭定址的時間。2 零複製技術 正...

docker學習筆記(1) 架構概述

優點對於簡單系統 缺點對於複雜系統 優點對於複雜系統 缺點對於簡單系統 客戶端訪問不同微服務,這些服務又會呼叫其他微服務 所有請求都從api閘道器走 基於linux核心的namespaces control groups union file systems技術對程序進行封裝隔離,屬於作業系統層面的...

Dubbo實踐(二)架構

節點角色說明 節點 角色說明 provider 暴露服務的服務提供方 consumer 呼叫遠端服務的服務消費方 registry 服務註冊與發現的註冊中心 monitor 統計服務的呼叫次數和呼叫時間的監控中心 container 服務執行容器 呼叫關係說明 服務容器負責啟動,載入,執行服務提供者...