Kafka知識盤點【叄】_消費者

Kafka知識盤點【壹】_生產者

Kafka知識盤點【貳】_broker

 

1.消費者組

生產環境上,kafka都是配置消費者組來進行topic消息的消費。對於一個消費者組,會有多個消費者實例,同一個topic的消息只會發送到一個消費者組的其中一個消費者實例上消費,但是同一個topic可以被多個消費者組訂閱。

kafka的消息消費是基於拉模式的,即消費者不斷調用poll()方法,獲取訂閱topic的一組消息。前文中我們知道,kafka的消息是劃分多個分區保存在broker上的,那麼對於一個消費者實例,也是會指定去消費其中一個消息分區上的消息的。所以,kafka對於順序消費也只能保證同一個分區上的消息可以實現。

kafka的設計是每個消費者會爲它所消費的分區位數屬於自己的消費位置信息,即消費偏移(consumeOffset)。和該信息維護在broker上相比:broker變成了有狀態的,難以維護;需引入ack方式確認消費成功;broker要維護所有消費者的消費偏移,結構複雜。

kafka消費者會定期向broker集羣彙報消費偏移,即位移提交。在0.10.0之前的版本是提交到zk的/consumers/<group.id>/offsets/<topic>/<group.id>裏,新版本是保存到內部一個topic(__consumer_offsets)中。默認5s(auto.commit.interval.ms)自動提交一次每個分區中最大的消息位移。如果不想自動提交,則將enable.auto.commit設置爲false。

 

2.分區分配

2.1 分配策略

通過partition.assignment.strategy來設置,目前支持3種:

RangeAssignor(默認):按照消費者總數和分區總數進行整除運算來獲取一個跨度,然後根據跨度平均分配。假設n=分區數/消費者數量,m=分區數%消費者數量,那麼前m個消費者每個分配n+1個分區,後面的(消費者數量-m)個消費者每個分配n個分區。

RoundRobinAssignor:輪詢分配。

我們可以得知,消費者數量小於等於分區數量比較合理。

 

2.2 再均衡

即分區的消費權從一個消費者轉換到另一個消費者的過程。當有消費者掛掉(controller超過指定時間沒有收到該消費者心跳),或有新的消費者加入消費者組都會觸發再均衡。

再均衡由消費者組中第一個加入的消費者分配,它會先從controller獲取所有消費者信息,然後爲每個消費者分區,之後將這些信息發送給controller,最後controller再下發到各個消費者。每個消費者只能看到自己的分配信息。

 

3.參數配置

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章