kafka采用Consumer消費者Pull主動拉取數據的方式,當Broker無數據時,消費者空轉 。Kafka并不刪除已消費的消息,各自獨立的消費者可消費同一個Broker分區數據 。
消費流程1、消費者發起網絡消費請求
- # 每批次最小抓取設置(推薦1字節)
- fetch.min.bytes
- # 每批次最大抓取大小設置(推薦500ms)
- fetch.max.bytes
- # 未達到大小的超時設置(推薦50M)
- fetch.max.wait.ms
- # 單次拉取最大消息條數設置(推薦500條)
- max.poll.records
2.2、攔截器處理(如:匯總統計記錄)
3、數據的后續處理保存等的消費端動作 。
offset當一個消費者掛掉或重啟后,是否還記得消費到的位置了?offset解決了此問題 。
對于每一個topic,都會維持一個分區日志,分區中的每一個記錄都會分配一個Id來表示順序,稱之為offset,offset用來唯一的標識分區中每條記錄,并將每次的消費位置提交到topic中 。消費者恢復啟動后接著按序消費數據 。
自動提交
- # 開啟自動提交
- enable.auto.commit = true
- # 每次提交間隔(推薦5秒)
- auto.commit.interval.ms = 5000
- # 同步提交,等提交完成才可下一次再消費
- .CommitSync
- # 異步提交,可直接進行下一個消費,也有可能提交失敗
- .CommitAync
- # 按指定時間得出offset值
- .offsetsForTimes
- # 按指定offset值繼續消費
- .seek
