一些基本概念
Kafka 屬于分布式的消息引擎系統(tǒng)。
消息:Record绽快。Kafka 是消息引擎嘛芥丧,這里的消息就是指 Kafka 處理的主要對象。
主題:Topic坊罢。主題是承載消息的邏輯容器续担,在實際使用中多用來區(qū)分具體的業(yè)務。
分區(qū):Partition活孩。一個有序不變的消息序列物遇。每個主題下可以有多個分區(qū)。
消息位移:Offset。表示分區(qū)中每條消息的位置信息询兴,是一個單調(diào)遞增且不變的值乃沙。
副本:Replica。Kafka 中同一條消息能夠被拷貝到多個地方以提供數(shù)據(jù)冗余诗舰,這些地方就是所謂的副本警儒。副本還分為領導者副本和追隨者副本,各自有不同的角色劃分眶根。副本是在分區(qū)層級下的蜀铲,即每個分區(qū)可配置多個副本實現(xiàn)高可用。
生產(chǎn)者:Producer属百。向主題發(fā)布新消息的應用程序记劝。
消費者:Consumer。從主題訂閱新消息的應用程序族扰。
消費者位移:Consumer Offset厌丑。表征消費者消費進度,每個消費者都有自己的消費者位移别伏。
消費者組:Consumer Group蹄衷。多個消費者實例共同組成的一個組忧额,同時消費多個分區(qū)以實現(xiàn)高吞吐厘肮。
重平衡:Rebalance。消費者組內(nèi)某個消費者實例掛掉后睦番,其他消費者實例自動重新分配訂閱主題分區(qū)的過程类茂。Rebalance 是 Kafka 消費者端實現(xiàn)高可用的重要手段。
Kafka的三層消息架構(gòu)
第一層是主題層托嚣,每個主題可以配置 M 個分區(qū)巩检,而每個分區(qū)又可以副本成 N 個副本。
第二層是分區(qū)層示启,每個分區(qū)的 N 個副本中只能有一個充當領導者角色兢哭,對外提供服務;其他 N-1 個副本是追隨者副本夫嗓,只是提供數(shù)據(jù)冗余之用迟螺。
第三層是消息層,分區(qū)中包含若干條消息舍咖,每條消息的位移從 0 開始矩父,依次遞增。
最后排霉,客戶端程序只能與分區(qū)的領導者副本進行交互窍株。
Kafka Broker 是如何持久化數(shù)據(jù)的
總的來說,Kafka 使用消息日志(Log)來保存數(shù)據(jù),一個日志就是磁盤上一個只能追加寫(Append-only)消息的物理文件球订。因為只能追加寫入后裸,故避免了緩慢的隨機 I/O 操作,改為性能較好的順序I/O 寫操作冒滩,這也是實現(xiàn) Kafka 高吞吐量特性的一個重要手段轻抱。
不過如果你不停地向一個日志寫入消息,最終也會耗盡所有的磁盤空間旦部,因此 Kafka 必然要定期地刪除消息以回收磁盤祈搜。怎么刪除呢?簡單來說就是通過日志段(Log Segment)機制士八。在 Kafka 底層容燕,一個日志又近一步細分成多個日志段,消息被追加寫到當前最新的日志段中婚度,當寫滿了一個日志段后蘸秘,Kafka 會自動切分出一個新的日志段,并將老的日志段封存起來蝗茁。Kafka 在后臺還有定時任務會定期地檢查老的日志段是否能夠被刪除醋虏,從而實現(xiàn)回收磁盤空間的目的。