Kafka Consumer 消費消息和 Rebalance 機制

Kafka Consumer

Kafka 有消費組的概念,每個消費者只能消費所分配到的分區的消息,每一個分區只能被一個消費組中的一個消費者所消費,所以同一個消費組中消費者的數量如果超過了分區的數量,將會出現有些消費者分配不到消費的分區。消費組與消費者關係如下圖所示:

Kafka Consumer Client 消費消息通常包含以下步驟:

  1. 配置客戶端,創建消費者

  2. 訂閱主題

  3. 拉去消息並消費

  4. 提交消費位移

  5. 關閉消費者實例

因爲 Kafka 的 Consumer 客戶端是線程不安全的,爲了保證線程安全,並提升消費性能,可以在 Consumer 端採用類似 Reactor 的線程模型來消費數據。

Kafka consumer 參數

Kafka Rebalance

rebalance 本質上是一種協議,規定了一個 consumer group 下的所有 consumer 如何達成一致來分配訂閱 topic 的每個分區。比如某個 group 下有 20 個 consumer,它訂閱了一個具有 100 個分區的 topic。正常情況下,Kafka 平均會爲每個 consumer 分配 5 個分區。這個分配的過程就叫 rebalance。

什麼時候 rebalance?

這也是經常被提及的一個問題。rebalance 的觸發條件有三種:

如何進行組內分區分配?

Kafka 默認提供了兩種分配策略:Range 和 Round-Robin。當然 Kafka 採用了可插拔式的分配策略,你可以創建自己的分配器以實現不同的分配策略。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/bgLQQO2uNKbHxd9OSRvqpg