Kafka 原理,不就這么回事嘛
在看|星標(biāo)|留言,? 真愛

作者:臧遠慧
原文鏈接:https://juejin.im/post/5e217c3fe51d450200787f23

解耦:允許我們獨立的擴展或修改隊列兩邊的處理過程。
可恢復(fù)性:即使一個處理消息的進程掛掉,加入隊列中的消息仍然可以在系統(tǒng)恢復(fù)后被處理。
緩沖:有助于解決生產(chǎn)消息和消費消息的處理速度不一致的情況。
靈活性&峰值處理能力:不會因為突發(fā)的超負荷的請求而完全崩潰,消息隊列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力。
異步通信:消息隊列允許用戶把消息放入隊列但不立即處理它。


Producer:消息生產(chǎn)者,向 Kafka Broker 發(fā)消息的客戶端。
Consumer:消息消費者,從 Kafka Broker 取消息的客戶端。
Consumer Group:消費者組(CG),消費者組內(nèi)每個消費者負責(zé)消費不同分區(qū)的數(shù)據(jù),提高消費能力。一個分區(qū)只能由組內(nèi)一個消費者消費,消費者組之間互不影響。所有的消費者都屬于某個消費者組,即消費者組是邏輯上的一個訂閱者。
Broker:一臺 Kafka 機器就是一個 Broker。一個集群由多個 Broker 組成。一個 Broker 可以容納多個 Topic。
Topic:可以理解為一個隊列,Topic 將消息分類,生產(chǎn)者和消費者面向的是同一個 Topic。
Partition:為了實現(xiàn)擴展性,提高并發(fā)能力,一個非常大的 Topic 可以分布到多個 Broker (即服務(wù)器)上,一個 Topic 可以分為多個 Partition,每個 Partition 是一個 有序的隊列。
Replica:副本,為實現(xiàn)備份的功能,保證集群中的某個節(jié)點發(fā)生故障時,該節(jié)點上的 Partition 數(shù)據(jù)不丟失,且 Kafka 仍然能夠繼續(xù)工作,Kafka 提供了副本機制,一個 Topic 的每個分區(qū)都有若干個副本,一個 Leader 和若干個 Follower。
Leader:每個分區(qū)多個副本的“主”副本,生產(chǎn)者發(fā)送數(shù)據(jù)的對象,以及消費者消費數(shù)據(jù)的對象,都是 Leader。
Follower:每個分區(qū)多個副本的“從”副本,實時從 Leader 中同步數(shù)據(jù),保持和 Leader 數(shù)據(jù)的同步。Leader 發(fā)生故障時,某個 Follower 還會成為新的 Leader。
Offset:消費者消費的位置信息,監(jiān)控數(shù)據(jù)消費到什么位置,當(dāng)消費者掛掉再重新恢復(fù)的時候,可以從消費位置繼續(xù)消費。
ZooKeeper:Kafka 集群能夠正常工作,需要依賴于 ZooKeeper,ZooKeeper 幫助 Kafka 存儲和管理集群信息。


發(fā)布和訂閱記錄流,類似于消息隊列或企業(yè)消息傳遞系統(tǒng)。
以容錯的持久方式存儲記錄流。
處理記錄流。


# ls /root/data/kafka/first-0
00000000000000009014.index
00000000000000009014.log
00000000000000009014.timeindex
00000000000000009014.snapshot
leader-epoch-checkpoint


方便在集群中擴展,每個 Partition 可以通過調(diào)整以適應(yīng)它所在的機器,而一個 Topic 又可以有多個 Partition 組成,因此可以以 Partition 為單位讀寫了。
可以提高并發(fā),因此可以以 Partition 為單位讀寫了。
topic:string 類型,NotNull。
partition:int 類型,可選。
timestamp:long 類型,可選。
key:string 類型,可選。
value:string 類型,可選。
headers:array 類型,Nullable。



0:Producer 不等待 Broker 的 ACK,這提供了最低延遲,Broker 一收到數(shù)據(jù)還沒有寫入磁盤就已經(jīng)返回,當(dāng) Broker 故障時有可能丟失數(shù)據(jù)。
1:Producer 等待 Broker 的 ACK,Partition 的 Leader 落盤成功后返回 ACK,如果在 Follower 同步成功之前 Leader 故障,那么將會丟失數(shù)據(jù)。
-1(all):Producer 等待 Broker 的 ACK,Partition 的 Leader 和 Follower 全部落盤成功后才返回 ACK。但是在 Broker 發(fā)送 ACK 時,Leader 發(fā)生故障,則會造成數(shù)據(jù)重復(fù)。

AtLeastOnce+ 冪等性 = ExactlyOnce






掃碼加我微信進群,大廠內(nèi)推和技術(shù)交流,大佬們零距離
開發(fā)者技術(shù)前線 ,匯集技術(shù)前線快訊和關(guān)注行業(yè)趨勢,大廠干貨,是開發(fā)者經(jīng)歷和成長的優(yōu)秀指南。



