spark消費kafka時自助管理offset方法

2021-08-21 20:27:26 字數 1040 閱讀 2511

offset的儲存位置

在kafka0.9版本之前消費者儲存的偏移量是在zookeeper中/consumers/group.id/offsets/topic.name/partition.id。新版消費者不再儲存偏移量到zookeeper中,而是儲存在kafka的乙個內部主題中「__consumer_offsets」,該主題預設有50個分割槽,每個分割槽3個副本,分割槽數量有引數offset.topic.num.partition設定。通過消費者組id的雜湊值和該引數取模的方式來確定某個消費者組已消費的偏移量儲存到__consumer_offsets主題的哪個分割槽中

為什麼要自助管理offset

如果是使用spark-streaming-kafka-0-10,那麼我們建議將enable.auto.commit設為false。這個配置只是在這個版本生效,enable.auto.commit如果設為true的話,那麼意味著offsets會按照auto.commit.interval.ms中所配置的間隔來週期性自動提交到kafka中。在spark streaming中,將這個選項設定為true的話會使得spark應用從kafka中讀取資料之後就自動提交,而不是資料處理之後提交,這不是我們想要的。所以為了更好地控制offsets的提交,我們建議將enable.auto.commit設為false。

如何自主管理

自主管理offset,就是選取第三方儲存系統(hdfs、hbase、zookeeper等)

hdfs:有官方提供,checkpoint(),有乙個重要的弊端:在hdfs備份後發生產品公升級或**改動操作,將無法還原已備份的offset,所以正式產品沒人用它

hbase和zookeeper比較常用,儲存對應topic下每個分割槽的offset,但是要注意當topic的新增分割槽的可能

新版本的方法

由kafka自身儲存,這個方法也是官方推薦的

應用 使用第三方管理offset適用於需要對訊息消費,offset的值有嚴格監控的場景

參考

spark消費kafka的兩種方式

一 基於receiver的方式 這種方式使用receiver來獲取資料。receiver是使用kafka的高層次consumer api來實現的。receiver從kafka中獲取的資料都是儲存在spark executor的記憶體中的 如果突然資料暴增,大量batch堆積,很容易出現記憶體溢位的問...

kafka消費訊息時的冪等性

1.什麼是kafka消費訊息時的冪等性 kafka消費訊息時的冪等性,簡而言之就是消費者對介面的多次呼叫所產生的結果和呼叫一次是是一致的,也就是說在kafka中有可能會消費到重複的資料,這個時候需要客戶端去處理這種情況,使得訊息消費一次和消費多次是一樣的結果。2.產生原因 資料流 生產者 生產者會往...

kafka消費原理

consumer 採用 pull 拉 模式從 broker 中讀取資料。push 推 模式很難適應消費速率不同的消費者,因為訊息傳送速率是由 broker 決定的。它的目標是盡可能以最快速度傳遞訊息,但是這樣很容易造成 consumer 來不及處理訊息,典型的表現就是拒絕服務以及網路擁塞。而 pul...