kafka工作原理介紹

2022-06-18 20:30:16 字數 2819 閱讀 9243

中間的kafka cluster,儲存訊息,是由多個server組成的集群。

2、topic與訊息

kafka將所有訊息組織成多個topic的形式儲存,而每個topic又可以拆分成多個partition,每個partition又由乙個乙個訊息組成。每個訊息都被標識了乙個遞增序列號代表其進來的先後順序,並按順序儲存在partition中。

這樣,訊息就以乙個個id的方式,組織起來。

consumer選擇乙個topic,通過id指定從哪個位置開始消費訊息。消費完成之後保留id,下次可以從這個位置開始繼續消費,也可以從其他任意位置開始消費。

上面的id在kafka中稱為offset,這種組織和處理策略提供了如下好處:

producer生產訊息需要如下引數:

傳統訊息系統有兩種模式:

kafka通過consumer group將兩種模式統一處理:每個consumer將自己標記consumer group名稱,之後系統會將consumer group按名稱分組,將訊息複製並分發給所有分組,每個分組只有乙個consumer能消費這條訊息。如下圖:

於是推理出兩個極端情況:

注意:2、consumer併發消費訊息時,容易導致訊息亂序,通過限制消費者為同步,可以保證訊息有序,但是這大大降低了程式的併發性。

kafka通過partition的概念,保證了partition內訊息有序性,緩解了上面的問題。partition內訊息會複製分發給所有分組,每個分組只有乙個consumer能消費這條訊息。這個語義保證了某個分組消費某個分割槽的訊息,是同步而非併發的。如果乙個topic只有乙個partition,那麼這個topic併發消費有序,否則只是單個partition有序。

一般訊息系統,consumer存在兩種消費模型

:kafka採用pull,並採用可配置化引數保證當存在資料並且資料量達到一定量的時候,consumer端才進行pull操作,否則一直處於block狀態。kakfa採用整數值consumer position來記錄單個分割槽的消費狀態,並且單個分割槽單個訊息只能被consumer group內的乙個consumer消費,維護簡單開銷小。消費完成,broker收到確認,position指向下次消費的offset。由於訊息不會刪除,在完成消費,position更新之後,consumer依然可以重置offset重新消費歷史訊息。

producer視角

consumer視角

注意

在kafka中,正常情況下所有node處於同步中

狀態,當某個node處於非同步中

狀態,也就意味著整個系統出問題,需要做容錯處理。

同步中

代表了:

某個分區內同步中

的node組成乙個集合,即該分割槽的isr。

kafka通過兩個手段容錯:

1. 當leader處於非同步中

時,系統從followers中選舉新leader

2. 當某個follower狀態變為非同步中

時,leader會將此follower剔除isr,當此follower恢復並完成資料同步之後再次進入 isr。

另外,kafka有個保障:當producer生產訊息時,只有當訊息被所有isr確認時,才表示該訊息提交成功。只有提交成功的訊息,才能被consumer消費。

因此,當有n個副本時,n個副本都在isr中,n-1個副本都出現異常時,系統依然能提供服務。

假設n副本全掛了,node恢復後會面臨同步資料的過程,這期間isr中沒有node,會導致該分割槽服務不可用。kafka採用一種降級措施來處理:選舉第乙個恢復的node作為leader提供服務,以它的資料為基準,這個措施被稱為髒leader選舉

。由於leader是主要提供服務的,kafka broker將多個partition的leader均分在不同的server上以均攤風險。每個parition都有leader,如果在每個partition內執行選主程序,那麼會導致產生非常多選主程序。kakfa採用一種輕量級的方式:從broker集群中選出乙個作為controller,這個controller監控掛掉的broker,為上面的分割槽批量選主。

上面的方案保證了資料高可用,有時高可用是體現在對一致性的犧牲上。如果希望達到強一致性,可以採取如下措施:

基於以下幾點事實,kafka重度依賴磁碟而非記憶體來儲存訊息。

kafka官方文件

kafka全解析

小白也能看懂的簡單明瞭kafka原理解析

Kafka 原理介紹

kafka是乙個分布式訊息佇列。kafka對訊息儲存時根據topic進行歸類,傳送訊息者稱為producer,訊息接受者稱為consumer,此外kafka集群有多個kafka例項組成,每個例項 server 稱為broker。無論是kafka集群,還是consumer都依賴於zookeeper集群...

Kafka介紹和原理

簡而言之,kafka是一種mq,現在有很多開源的mq,包括activemq,rokectmq,rabbitmq和kafka等等。還有些大型網際網路公司內部不開源的mq,比如阿里巴巴的metaq,京東的jmq等等。kafka是強依賴於zookeeper的,所以,如果想深入了解kafka,需要熟悉zoo...

kafka工作原理解析

三 kafka設計解析 有兩個生產者,生產topic 不同的topic表示不同訊息的型別 每乙個topic中的partition都會有副本 replices 例如乙個topic1,有兩個partition,另乙個topic有乙個partition 乙個partition對應 每乙個partition...