kafka原理分析

2022-06-09 08:03:10 字數 1080 閱讀 8483

#kafka為什麼有高吞吐量

1 由於接收資料時可以設定request.required.acks引數,一般設定為1或者0,即生產者傳送訊息0代表不關心kafka是否接收成功,也就是關閉ack;1代表kafka端leader角色的patation(多個patation,並且每個會有多個副本)接收到資料則返回成功不管副本patation的狀態。

2 由於消費者的消費情況不歸kafka訊息管理引擎維護,而是放在消費者組端(***同一消費者組不會消費相同資料)。這樣也能減少kafka的核心訊息引擎能夠減少工作只負責輸出資料,pull工作模式的好處是可以根據消費者的能力拉取資料,但是消費端獲取資料實質是準實時的;

以上兩點可以保證kafka具有較強的吞吐量,訊息中心也只負責輸入和輸出,並不關心多餘的操作

#min.insync.replicas 這個引數設定patation中的最少副本數是多少,預設值為1 ; 

#廢棄了replica.lag.max.messages引數(0.9及以後):

該引數為follower是否生效的判斷,而在實際的生產中很難確定這個值,由於吞吐量在不同時間點可能數量級不同,導致follower拉取leader資料很難跟上節奏,這樣就會在isr佇列中不斷的加入移除這個follower。

那麼有什麼可能的原因會使得follower副本與leader副本不同步呢?歸納起來有三種原因:

replica.lag.max.messags引數就是用於檢測第一種情況的。當然kafka還提供了乙個引數 replica.lag.time.max.ms來檢測另外兩種情況。比如如果設定 replica.lag.time.max.ms=500ms,只要follower副本每隔500ms都能傳送fetchrequest請求給leader,那麼該副本就不會被標記成dead從而被踢出isr。

#「消費資料」策略和「生產資料」策略

consumer消費partation中的資料只能保證partation內資料的順序,而不能保證partation間的順序;

product可以通過rank策略或者hash策略(預設)來把資料具體分發到某個partation中;

乙個partation的資料被消費時只能流向1個consumer,partation內部資料是1個單元。

kafka 原理分析

partition是以檔案的形式儲存在檔案系統中,比如建立乙個名為firsttopic的topic,其中有3個 partition,那麼在kafka的資料目錄 tmp kafka log 中就有3個目錄,firsttopic 0 3,命名規則是 sh kafka topics.sh create z...

KAFKA原理簡介

每條訊息在檔案中的位置成為offset 偏移量 offset為long型數字。過後無論是否被消費,都會被清楚。consumer儲存消費資訊的offset。kafka通過partition將日誌內容分散到多個server上,每個partition都會被 當前server儲存,kafka可以配置part...

Kafka複製原理

每個主題都有多個分割槽 每個分割槽都會有自己的多個副本 每個分割槽與自己的副本之間都會有乙個leader 同一主題下的不同分割槽包含的訊息不同 同一條訊息不會出現在多個分割槽中 由於訊息是以可追加的log日誌儲存到分割槽中的,多個分割槽順序寫磁碟的總效率要比隨機寫記憶體還要高 訊息被追加到分割槽日誌...