初識原理系列之Kafka

2021-08-20 05:13:01 字數 4086 閱讀 6941

做個初識原理系列

就當做複習和鞏固之前的知識吧

訊息生產者,發布訊息到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 向主題註冊,並且接收發布到...