做個初識原理系列
就當做複習和鞏固之前的知識吧
訊息生產者,發布訊息到kafka 集群的終端或服務。
2.broker:
kafka 集群中包含的伺服器。
3.topic:
每條發布到kafka 集群的訊息屬於的類別,即kafka 是面向topic 的。
4.partition:
partition 是物理上的概念,每個 topic 包含乙個或多個 partition。kafka 分配的單位是 partition。
5.consumer:
從kafka 集群中消費訊息的終端或服務。
6.consumer group:
high-level consumer api 中,每個 consumer 都屬於乙個 consumer group,每條訊息只能被 consumer group 中的乙個 consumer 消費,但可以被多個 consumer group 消費。
7.replica:
partition 的副本,保障 partition 的高可用。
8.leader:
replica 中的乙個角色, producer 和 consumer 只跟 leader 互動。
9.follower:
replica 中的乙個角色,從 leader 中複製資料。
10.controller:
kafka 集群中的其中乙個伺服器,用來進行 leader election 以及
各種 failover。
12.zookeeper:
kafka 通過 zookeeper 來儲存集群的 meta 資訊。
1.圖中
brokers
部分,有
4個框,每個框代表乙個
broker
,而在眾多的
broker
中會有乙個
leader
,稱之為
controller
,也就是圖中的第二個框。那麼
controller
有什麼用呢,它負責管理整個集群中分割槽和副本的狀態,比如
partition
的leader
副本故障,由
controller
負責為該
partition
重新選舉新的
leader
副本;當檢測到
isr列表發生變化,有
controller
通知集群中所有
broker
更新其metadatacache
資訊;或者增加某個
topic
分割槽的時候也會由
controller
管理分割槽的重新分配工作。
2.再具體看到每乙個框中的內容,即乙個
broker
。broker
中會放置多個
partition
分割槽,這些分割槽屬於的
topic
的都是不一樣的。乙個
topic
會有乙個或多個分割槽,每個分割槽為了保證資料的高可用性,會建立多個副本,這時候多個副本就會放在不同的
broker
中。例如圖中1,
2,3個框中,都存在了
topic1-part1
這個分割槽。然而訊息如何寫入分割槽呢,總不能每個副本都寫一次吧,這樣會很慢,因此在幾個副本中會選出乙個
leader
,寫訊息只會寫入
leader
所在的分割槽,其他的稱為
follower
,follower
為了起到副本的作用,會把
leader
的資料copy
過來。所以上圖基本能看明白了。
如果某個分割槽所在的伺服器除了問題,不可用,
kafka
會從該分割槽的其他的副本中選擇乙個作為新的
leader
。之後所有的讀寫就會轉移到這個新的
leader
上。現在的問題是應當選擇哪個作為新的
leader
。顯然,只有那些跟
leader
保持同步的
follower
才應該被選作新的
leader
。kafka
會在zookeeper
上針對每個
topic
維護乙個稱為
isr(
in-sync replica
,已同步的副本)的集合,該集合中是一些分割槽的副本。只有當這些副本都跟
leader
中的副本同步了之後,
kafka
才會認為訊息已提交,並反饋給訊息的生產者。如果這個集合有增減,
kafka
會更新zookeeper
上的記錄。
如果某個分割槽的leader不可用,kafka就會從isr集合中選擇乙個副本作為新的leader。
顯然通過isr,kafka需要的冗餘度較低,可以容忍的失敗數比較高。假設某個topic有f+1個副本,kafka可以容忍f個伺服器不可用。
partition
topic
物理上的分組,乙個
topic
可以分為多個
partition
,每個partition
是乙個有序的佇列。
在kafka
檔案儲存中,同乙個
topic
下有多個不同
partition
,每個partition
為乙個目錄,
partiton
命名規則為
topic名稱+
有序序號,第乙個
partiton
序號從0
開始,序號最大值為
partitions
數量減1
每個partiton
只需要支援順序讀寫就行了,
segment
檔案生命週期由服務端配置引數決定。
這樣做的好處就是能快速刪除無用檔案,有效提高磁碟利用率。
每個partion(目錄)相當於乙個巨型檔案被平均分配到多個大小相等segment(段)資料檔案中。但每個段segment file訊息數量不一定相等,這種特性方便old segment file快速被刪除。
segment file
組成: 由
2大部分組成,分別為index file和data file,此2個檔案一一對應,成對出現,字尾」.index」和「.log」分別表示為segment索引檔案、資料檔案.
檔案命名規則:
partion
全域性的第乙個segment從0開始,後續每個segment檔名為上乙個segment檔案最後一條訊息的offset值。數值最大為64位long大小,19位數字字元長度,沒有數字用0填充
其中.index
索引檔案儲存大量元資料,
.log
資料檔案儲存大量訊息,索引檔案中元資料指向對應資料檔案中
message
的物理偏移位址。他們兩個是一一對應的,對應關係如下
segment data file由許多message組成,message物理結構如下
關於zookeeper
zookeeper是用來協調kafka的,具體怎麼協調,了解了zookeeper的執行機制就知道了
Kafka系列文章之kafka環境搭建
現在最新的版本是2.1.1 將安裝包解壓到指定位置 3.1.修改kafka home config zookeeper.properties,將datadir 修改為自己的data資料夾 3.2.修改kafka home config server.properties,將datadir 修改為自己...
kafka系列之kafka入門概論 1
舉個例子,生產者消費者,生產者生產雞蛋,消費者消費雞蛋,生產者生產乙個雞蛋,消費者就消費乙個雞蛋,假設消費者消費雞蛋的時候噎住了 系統宕機了 生產者還在生產雞蛋,那新生產的雞蛋就丟失了。再比如生產者很強勁 大交易量的情況 生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能吃50個雞蛋,那要不了一會,消費...
Apache Kafka系列之Kafka介紹
kafka是乙個分布式的 分割槽的 多複本的日誌提交服務。它通過一種獨一無二的設計提供了乙個訊息系統的功能。所有的這些意味著什麼?1 kafka維護按類區分的訊息,稱為主題 topic 2 生產者 producer 向kafka的主題發布訊息 3 消費者 consumer 向主題註冊,並且接收發布到...