《來(lái)自LinkedIn的實(shí)踐:生產(chǎn)環(huán)境下Kafka的調(diào)試和最佳實(shí)踐》要點(diǎn):
本文介紹了來(lái)自LinkedIn的實(shí)踐:生產(chǎn)環(huán)境下Kafka的調(diào)試和最佳實(shí)踐,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
在本文中,LinkedIn的軟件工程師Joel Koshy詳細(xì)闡述了他和一個(gè)工程師團(tuán)隊(duì)是如何解決生產(chǎn)環(huán)境下Kafka的兩次事故的.這兩次事故是由于多個(gè)產(chǎn)品缺陷、特殊的客戶行為以及監(jiān)控缺失的交錯(cuò)影響導(dǎo)致的.
第一個(gè)缺陷是在LinkedIn的變更請(qǐng)求跟蹤系統(tǒng)中觀察到的,部署平臺(tái)認(rèn)為這是從服務(wù)發(fā)出的重復(fù)郵件.Koshy指出,其根本原因是由于消息格式的改變,和隨后緩存加載在偏移管理器的終止,而這個(gè)偏移管理器已經(jīng)被設(shè)置了一個(gè)舊的偏移量.由于這個(gè)主題分區(qū)上的低數(shù)據(jù)容量,日志壓縮和清除觸發(fā)器在部署的主題上從來(lái)沒有被觸發(fā)過(guò).這導(dǎo)致一個(gè)舊的偏移量被當(dāng)作消費(fèi)者的起點(diǎn),同時(shí)也使得以前已經(jīng)消費(fèi)過(guò)的消息被重新讀取,并觸發(fā)了重復(fù)的電子郵件.
第二個(gè)缺陷是在一個(gè)數(shù)據(jù)部署管道中,它里面的Hadoop推送作業(yè)器會(huì)發(fā)送數(shù)據(jù)到Kafka的非生產(chǎn)環(huán)境,然后通過(guò)Kafka集群復(fù)制到生產(chǎn)集群.在發(fā)現(xiàn)取回的偏移量沒有有效檢查點(diǎn)的時(shí)候,復(fù)制就被卡住了.它表明前一個(gè)檢查的偏移量被丟掉了.Koshy是這樣描述根本原因的:
……由于日志壓縮進(jìn)程已經(jīng)停止一段時(shí)間了,有幾個(gè)較舊的偏移量仍然還在主題中.偏移緩存加載進(jìn)程已經(jīng)將它們加載到了緩存中.這本身是沒有問(wèn)題的,因?yàn)槿罩局懈嗟淖钚缕屏孔罱K會(huì)覆蓋那些舊的條目.問(wèn)題出在舊偏移量的清除進(jìn)程是在偏移加載的過(guò)程中開始的,偏移加載的過(guò)程需要較長(zhǎng)的時(shí)間.舊條目清除之后會(huì)在日志末尾追加標(biāo)記.而與此同時(shí),偏移量的加載過(guò)程仍在進(jìn)行,并會(huì)加載最近的偏移量到緩存中,但它只會(huì)在看到標(biāo)記之后才會(huì)去除那些條目.這就解釋了為什么偏移量實(shí)際上被丟失的原因.
Kafka代理之間不清楚首席代理選舉的規(guī)則,這會(huì)導(dǎo)致處于分區(qū)的首席代理在完成復(fù)制延遲過(guò)程中的失敗會(huì)引起偏移量倒轉(zhuǎn).Kafka消息的消費(fèi)者發(fā)出讀取指定偏移量的請(qǐng)求.消費(fèi)者會(huì)對(duì)主題分區(qū)檢查它們的偏移量,因此它們可以從最后一次檢查點(diǎn)(消費(fèi)者需要重啟的點(diǎn))重新開始.檢查可以發(fā)生在很多時(shí)候,包括消費(fèi)者失敗、重啟或者分區(qū)被加到主題里以及在消費(fèi)者實(shí)例之間的分區(qū)分發(fā)規(guī)則需要改變的時(shí)候.如果一個(gè)消費(fèi)者獲取這個(gè)代理的主題日志之外的偏移關(guān)鍵字,它會(huì)收到OffsetOutOfRange的錯(cuò)誤.消費(fèi)者需要根據(jù)它們auto.offset.reset配置,來(lái)重新設(shè)置它們的偏移為最新或最早的有效偏移.
Koshy指出,
重置為最早的偏移會(huì)引起重復(fù)消費(fèi),而重置為最新的偏移意味著可能會(huì)丟失在偏移復(fù)位和下一次讀取之間已經(jīng)到達(dá)的消息.
Koshy還著重指出一些盡早發(fā)現(xiàn)偏移倒回的最佳實(shí)踐,包括:通過(guò)監(jiān)控集群中模糊不清的首席選舉率,基于消費(fèi)者延遲的監(jiān)控和告警從而避免誤報(bào).監(jiān)控日志壓縮的指標(biāo)(特別是最大臟讀率傳感器的),以及偏移管理的指標(biāo)(如偏移緩存大小、提交率、組數(shù)傳感器等).偏移量自己被存在一個(gè)可復(fù)制、可分區(qū)、可壓縮的日志中,它們與內(nèi)部的_consmer_offsets主題相關(guān)聯(lián).Koshy推薦在調(diào)試進(jìn)程中盡早導(dǎo)出內(nèi)部主題,從而避免日志壓縮刪除那些潛在有用的數(shù)據(jù).特定的主題由消息組成,任何的時(shí)間偏移提交請(qǐng)求都會(huì)被發(fā)送到偏移管理代理中.在這種情況下,消費(fèi)者和代理的日志也是可能有用的.
文章出處:聊聊架構(gòu)
文/Joel?Koshy
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/4482.html