kafka consumer:消費者可以從多個broker中讀取數據。消費者可以消費多個topic中的數據。
因為Kafka的broker是無狀態的,所以consumer必須使用partition offset來記錄消費了多少數據。如果一個consumer指定了一個topic的offset,意味着該consumer已經消費了該offset之前的所有數據。consumer可以通過指定offset,從topic的指定位置開始消費數據。consumer的offset存儲在Zookeeper中。
offset:用來保存消費進度。offset表示在當前topic,當前groupID下消費到的位置。offset為earliest並不代表offset=1.在不進行過期配置的情況下,kafka消息默認7天時間就會過期。過期后其offset也就隨之發生變化,使得用數字進行配置的消費進度並不准確。
1) earliest:自動重置到最早的offset。
2) latest:看上去重置到最晚的offset。
3) none:如果邊更早的offset也沒有的話,就拋出異常給consumer,告訴consumer在整個consumer group中都沒有發現有這樣的offset。
groupID:
一個字符串用來指示一組consumer所在的組。相同的groupID表示在一個組里。相同的groupID消費記錄offset時,記錄的是同一個offset
。
所以,此處需要注意,(1)如果多個地方都使用相同的groupid,可能造成個別消費者消費不到的情況(2)如果單個消費者消費能力不足的話,可以啟動多個相同groupid的consumer消費,處理相同的邏輯。但是,多線程的時候,需要增加每個groupid下的partition分區數量,便於每個線程穩定讀取固定的partition,提高消費能力。