Kafka分割槽分配策略(4)分配的實施

2021-09-17 22:33:54 字數 1247 閱讀 4467

2.groupcoordinator收集各個消費者的提案,然後執行以下兩個步驟:一、選舉消費組的leader;二、選舉消費組的分割槽分配策略。

選舉消費組的分割槽分配策略比較好理解,為什麼這裡還要選舉消費組的leader,因為最終的分割槽分配策略的實施需要有乙個成員來執行,而這個leader消費者正好扮演了這乙個角色。在kafka中把具體的分割槽分配策略的具體執行權交給了消費者客戶端,這樣可以提供更高的靈活性。比如需要變更分配策略,那麼只需修改消費者客戶端就醒來,而不必要修改並重啟kafka服務端。

怎麼選舉消費組的leader? 這個分兩種情況分析:如果消費組內還沒有leader,那麼第乙個加入消費組的消費者即為消費組的leader;如果某一時刻leader消費者由於某些原因退出了消費組,那麼就會重新選舉乙個新的leader,這個重新選舉leader的過程又更為「隨意」了,相關**如下:

//scala code.

private val members = new mutable.hashmap[string, membermetadata]

var leaderid = members.keys.head12

3解釋一下這2行**:在groupcoordinator中消費者的資訊是以hashmap的形式儲存的,其中key為消費者的名稱,而value是消費者相關的元資料資訊。leaderid表示leader消費者的名稱,它的取值為hashmap中的第乙個鍵值對的key,這種選舉的方式基本上和隨機挑選無異。

總體上來說,消費組的leader選舉過程是很隨意的。

怎麼選舉消費組的分配策略?投票決定。每個消費者都可以設定自己的分割槽分配策略,對於消費組而言需要從各個消費者所呈報上來的各個分配策略中選舉乙個彼此都「信服」的策略來進行整體上的分割槽分配。這個分割槽分配的選舉並非由leader消費者來決定,而是根據消費組內的各個消費者投票來決定。這裡所說的「根據組內的各個消費者投票來決定」不是指groupcoordinator還要與各個消費者進行進一步互動來實施,而是根據各個消費者所呈報的分配策略來實施。最終所選舉的分配策略基本上可以看做是被各個消費者所支援的最多的策略,具體的選舉過程如下:

收集各個消費者所支援的所有分配策略,組成候選集candidates。

每個消費者從候選集candidates中找出第乙個自身所支援的策略,為這個策略投上一票。

計算候選集中各個策略的選票數,選票數最多的策略即為當前消費組的分配策略。

如果某個消費者並不支援所選舉出的分配策略,那麼就會報錯。

3.groupcoordinator傳送回執給各個消費者,並交由leader消費者執行具體的分割槽分配。

kafka的分割槽分配策略

將所有broker n個 和partition排序 將第i個partition分配到第 i mode n 個broker上 當key為空時,訊息隨機傳送到各個分割槽 各個版本會有不同,有的是採用輪詢的方式,有的是隨機,有的是一定時間內只傳送給固定partition,隔一段時間後隨機換乙個 用key的...

Kafka的分割槽分配策略

用過 kafka 的同學應該都知道,每個 topic 一般會有很多個 partitions。為了使得我們能夠及時消費訊息,我們也可能會啟動多個 consumer 去消費,而每個 consumer 又會啟動乙個或多個streams去分別消費 topic 對應分割槽中的資料。我們又知道,kafka 存在...

詳解Kafka分割槽分配策略

前言 乙個consumer group中有多個consumer,乙個topic有多個partition,所以必然會涉及到partition的分配問題,即確定那個partition由哪個consumer來消費。kafka有兩種分配策略,一是roundrobin,二是range 1.roundrobin...