從今天開始開始在csdn上記錄學習的筆記,主要包括以下幾個方面:
- kafka
- flink
- doris
本系列筆記主要記錄Kafka學習相關的內容。在進行kafka源碼學習之前,先介紹一下Kafka的核心概念。
消息
消息是kafka中最基本的數據單元,由key和value組成,都是字節數組。key主要來實現路由功能,value是真正的有效負載。
topic&分區&Log
topic是用于存儲消息的邏輯概念,是一個消息集合。
每個topic可以劃分為多個分區,每個分區內的數據是不重疊的,每個消息在添加到分區時,都會分配一個編號offset,來保證消息在分區內的順序。
分區在邏輯上對應著一個Log,當生產者將消息寫入分區時,實際上是寫入到了分區對應的Log中。Log是一個邏輯概念,可以對應磁盤上的一個文件夾,Log由多個Segment組成,每個Segment對應一個日志文件和索引文件。
保留策略&日志壓縮
發送到kafka的數據會被保存下來,但不會像數據庫那樣永久保存,為了避免數據庫被占滿,kafka有相應的保留策略,周期性刪除陳舊消息。kafka中有兩種保留策略:基于時間和topic大小的保留策略。
kafka會對存儲的消息進行壓縮,以減少磁盤占用。
broker
一個單獨的kafka server就是一個broker。broker的主要工作就是接收生產者發過來的消息,同時接收消費者的請求,返回存儲的數據。一般一個broker占一臺物理機器。
副本
kafka對消息進行了冗余備份,每個分區可以有多個副本,每個副本消息是一樣的。每個分區至少有一個副本,所有副本中選取一個當做Leader,其它副本從Leader處拉取消息。
一般情況下,同一分區的多個副本會分配到不同的broker上。一個topic包括多個分區,每個分區的數據是不一樣的,可以實現水平擴展,當數據量變大時可以增大分區的數量;每個分區有多個副本,多副本情況下可丟失其中某個副本。
ISR集合
ISR集合表示目前“可用”且消息量與leader差不多的副本集合,是整個副本集合的一個子集。ISR必須滿足兩個條件:1副本所在節點必須維持著與zookeeper的連接;2副本最后一條消息的offset與Leader副本的的最后一條消息offset不能超過指定的閾值。每個分區的Leader副本都會維護此分區的ISR集合。
參考書籍《Apache Kafka源碼剖析》