天天看點

【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者

本文是對《【硬剛大資料之學習路線篇】從零到大資料專家的學習指南(全面更新版)》的Kafka部分補充。

consumer 采用 pull(拉)模式從 broker 中讀取資料。

push(推)模式很難适應消費速率不同的消費者,因為消息發送速率是由 broker 決定的。它的目标是盡可能以最快速度傳遞消息,但是這樣很容易造成 consumer 來不及處理消息,

典型的表現就是拒絕服務以及網絡擁塞。而 pull 模式則可以根據 consumer 的消費能力以适當的速率消費消息。

pull 模式不足之處是,如果 kafka 沒有資料,消費者可能會陷入循環中,一直傳回空資料。

針對這一點,Kafka 的消費者在消費資料時會傳入一個時長參數 timeout,如果目前沒有資料可供消費,consumer 會等待一段時間之後再傳回,這段時長即為 timeout。

一個 consumer group 中有多個 consumer,一個 topic 有多個 partition,是以必然會涉及到 partition 的配置設定問題,即确定那個 partition 由哪個 consumer 來消費。

Kafka 有兩種配置設定政策,一是 RoundRobin,一是 Range。

1)RoundRobin  

【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者
【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者

2)Range

【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者
【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者

  由于 consumer 在消費過程中可能會出現斷電當機等故障,consumer 恢複後,需要從故障前的位置的繼續消費,是以 consumer 需要實時記錄自己消費到了哪個 offset,以便故障恢複後繼續消費。 

【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者

Kafka 0.9 版本之前,consumer 預設将 offset 儲存在 Zookeeper 中,從 0.9 版本開始,consumer 預設将 offset 儲存在 Kafka 一個内置的 topic 中,該 topic 為__consumer_offsets。 

1)消費offset案例

【硬剛Kafka】KAFKA基礎(五): Kafka架構深入(3)Kafka 消費者

1)需求:測試同一個消費者組中的消費者,同一時刻隻能有一個消費者消費。

2)案例實操

(1)在 hadoop102、hadoop103 上修改/opt/module/kafka/config/consumer.properties 配置檔案中的 group.id 屬性為任意組名。

(2)在 hadoop102、hadoop103 上分别啟動消費者

(3)在 hadoop104 上啟動生産者 

(4)檢視 hadoop102 和 hadoop103 的接收者。

同一時刻隻有一個消費者接收到消息。