kafka服務端Offset保存時間過短導致consumer重啟后重復消費問題調查

consumer初始化時會從broker取commit offset作為初始fetch offset來取消息,之后會繼續(xù)在fetch offset上按順序正確的往后取消息轿秧。所以正常的運行只依靠fetch offset就足夠了鸳劳,而且fetch offset在初始化之后就不需要用戶理會,由consumer自行管理維護染苛。 consumer的commit作為松散的支線可以在任意時間點執(zhí)行,commit的意義在于盡可能及時的把消費處理的結果刷回broker去几缭,以備consumer重啟初始化或通過adminClient讀取使用,所以習慣上成功消費一條就commit一次沃呢。一般來說commit offset會落后fetch offset一些年栓,另外即使一次commit失敗了也沒關系,只要后序commit成功就能掩蓋薄霜。

consumer的commit offset保存在broker集群的有50個partition的內(nèi)部topic里某抓,保存時間 offsets.retention.minutes (1440 minutes = 1 day) 的意思是說超過這個時間沒有再次commit就刪除該consumer的commit offfset竿刁,意義在于刪除長期離線的consumer的commit信息。如果consumer從broker取commit時搪缨,還沒有提交過offset或是已經(jīng)被刪除食拜,就返回0。

broker里的topic消息log只會保留 log.retention.hours (168 hours = 7 days) 副编,時間點以前的消息就會被截斷刪除负甸。而consumer的配置 auto.offset.reset(earliest | latest) 當consumer提供的fetch offset超出broker留存的消息log范圍時,把fetch offset重置到broker留存消息的最小位或最大位痹届。

場景描述:
因為commit offset的保存時間offsets.retention.minutes只有1天呻待,而消息log的保存時間log.retention.hours有7天。
如果consumer是手動commit队腐,當長時間沒有新消息可以消費蚕捉,也就長時間沒有commit,造成commit offset被broker刪除柴淘。之后一旦consumer重啟迫淹,初始化時發(fā)現(xiàn)commit offset已經(jīng)被刪除,取到了0去fetch为严,必定會超出broker的留存消息范圍敛熬,觸發(fā)consumer的reset。如果reset=earliest 就會從留存的7天內(nèi)的最小位消息開始消費第股,造成大量的重復消費应民。如果reset=latest 就會從最新消息開始消費,造成會丟失重啟期間的消息夕吻。

結論:
不能在還有數(shù)據(jù)的時候诲锹,失去對數(shù)據(jù)消費的commit信息。不然會在consumer重啟時把consumer reset到broker現(xiàn)有數(shù)據(jù)的最小位或最大位開始消費涉馅,造成數(shù)據(jù)重復或丟失归园。
反過來如果有commit信息,但數(shù)據(jù)已經(jīng)被刪除了控漠,有兩種情況
(1)說明consumer長期離線蔓倍,這樣的數(shù)據(jù)消費缺失是合理的悬钳,根據(jù)reset配置從當前現(xiàn)有數(shù)據(jù)的最小位或最大位開始消費盐捷。
(2)數(shù)據(jù)全部被消費過, 只是正常的過期刪除默勾,所以這并沒有任何問題碉渡,也不會發(fā)生reset。
正常情況下母剥,commit offset保存時間可以配置成消息log保存時間的2倍滞诺,如果log.retention.hours 仍然為 7 days形导,那 offsets.retention.minutes 可以配置成 14 days。習慣上把消息log配置保存 3 days习霹,offsets配置保存 6 days朵耕。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市淋叶,隨后出現(xiàn)的幾起案子阎曹,更是在濱河造成了極大的恐慌,老刑警劉巖煞檩,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件处嫌,死亡現(xiàn)場離奇詭異,居然都是意外死亡斟湃,警方通過查閱死者的電腦和手機熏迹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凝赛,“玉大人注暗,你說我怎么就攤上這事∧沽裕” “怎么了友存?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陶衅。 經(jīng)常有香客問我屡立,道長,這世上最難降的妖魔是什么搀军? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任膨俐,我火速辦了婚禮,結果婚禮上罩句,老公的妹妹穿的比我還像新娘焚刺。我一直安慰自己,他們只是感情好门烂,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布乳愉。 她就那樣靜靜地躺著,像睡著了一般屯远。 火紅的嫁衣襯著肌膚如雪蔓姚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天慨丐,我揣著相機與錄音坡脐,去河邊找鬼。 笑死房揭,一個胖子當著我的面吹牛备闲,可吹牛的內(nèi)容都是我干的晌端。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恬砂,長吁一口氣:“原來是場噩夢啊……” “哼咧纠!你這毒婦竟也來了?” 一聲冷哼從身側響起泻骤,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惧盹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞪讼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钧椰,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年符欠,在試婚紗的時候發(fā)現(xiàn)自己被綠了嫡霞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡希柿,死狀恐怖诊沪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曾撤,我是刑警寧澤端姚,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站挤悉,受9級特大地震影響渐裸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜装悲,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一昏鹃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诀诊,春花似錦洞渤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抡蛙,卻和暖如春护昧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溜畅。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工捏卓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慈格。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓怠晴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浴捆。 傳聞我的和親對象是個殘疾皇子蒜田,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容