consumer消費方式
pull模式,consumer從Broker中主動拉取數據
- pull模式不足之處:
如果 kafka 沒有數據,消費者可能會陷入循環中,一直返回空數據。針對這一點,Kafka 的消費者在消費數據時會傳入一個時長參數 timeout,如果當前沒有 數據可供消費,consumer 會等待一段時間之後再返回,這段時長即爲 timeout。
push模式,由Broker推送給consumer
- push模式不足之處:
push模式的目標是儘可能以最快速度傳遞消息,但是這樣很容易造成 consumer 來不及處理消息,典型的表現就是拒絕服務以及網絡擁塞。而 pull 模式則可以根據 consumer 的消費能力以適 當的速率消費消息。
consumer分區分配策略
一個 consumer group 中有多個 consumer,一個 topic 有多個 partition,所以必然會涉及到 partition 的分配問題,即確定哪個 partition 由哪個 consumer 來消費。Kafka 有兩種分配策略,RoundRobin和Range。
策略一:RoundRobin 輪詢分配
- 同一個topic下的多個partition會採用輪詢的方式將不同的partition分配給同一個consumer group中的多個consumer。
- 當消費者數量發生變化時會觸發分配策略重新分配。
- 注意點:
該策略模式的使用前提是該消費者組中的所有消費者訂閱的都是相同的topic。
策略二:Range 按範圍分配(默認策略)
- 同一個topic下的partition數量除以消費者組中的消費這數量,得到的就是每個consumer消費的分區數。
- 注意點:
當同一個消費者組中的不同消費者訂閱的是不同的topic,那麼會導致將同一個topic下的所有partition都分配給某個consumer,如果不同topic的partition數量相差較大,會導致不同消費者消費的partition數相差較大,不利於資源的合理利用。