Kafka知識盤點 叄 消費者

2021-10-05 19:02:15 字數 1205 閱讀 3877

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

kafka知識盤點【貳】_broker

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

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

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

kafka消費者會定期向broker集群匯報消費偏移,即位移提交。在0.10.0之前的版本是提交到zk的/consumers//offsets//裡,新版本是儲存到內部乙個topic(__consumer_offsets)中。預設5s(auto.commit.interval.ms)自動提交一次每個分割槽中最大的訊息位移。如果不想自動提交,則將enable.auto.commit設定為false。

2.1 分配策略

通過partition.assignment.strategy來設定,目前支援3種:

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

roundrobinassignor:輪詢分配。

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

2.2 再均衡

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

再均衡由消費者組中第乙個加入的消費者分配,它會先從controller獲取所有消費者資訊,然後為每個消費者分割槽,之後將這些資訊傳送給controller,最後controller再下發到各個消費者。每個消費者只能看到自己的分配資訊。

kafka消費者無法消費異常

今天被乙個kafka消費異常折磨了一天,頭差點炸了,還好最後解決了它 異常 伺服器 record is corrupt 記錄損壞 不明原因 有可能磁碟空間不足導致 導致消費者無法正常消費訊息 卡在某乙個offset 不能繼續消費 解決辦法 先停掉消費者程式 殺掉程序 不可關閉kafka服務 然後手動...

kafka 主動消費 Kafka消費者的使用和原理

publicstaticvoidmain string args finally 前兩步和生產者類似,配置引數然後根據引數建立例項,區別在於消費者使用的是反序列化器,以及多了乙個必填引數 group.id,用於指定消費者所屬的消費組。關於消費組的概念在 kafka中的基本概念 中介紹過了,消費組使得...

十 kafka複雜消費者

注意 對於多個partition和多個consumer 1 如果consumer比partition多,是浪費,因為kafka的設計是在乙個partition上是不允許併發的,所以consumer數不要大於partition數 2 如果consumer比partition少,乙個consumer會對...