發(fā)現(xiàn)kafka丟消息后的排查

背景:

? ? ? 最近在用kafka做消息中間件钓瞭,producer從hive中讀取消息發(fā)送到kafka屡律,后端storm對消息分類發(fā)送到elasticsearch建立索引。

問題:

? ? ? hive表中總共350萬數(shù)據(jù)降淮,當(dāng)時整個全量索引結(jié)束后發(fā)現(xiàn)超埋,最后索引條數(shù)總共310萬左右。storm日志沒有任何錯誤日志佳鳖。

排查:

? ? ? 首先排查storm consumer的問題霍殴,由于發(fā)現(xiàn)storm日志沒有任何異常,所以第一步基本排除建索引程序的問題系吩。storm 消費kafka用的官方storm-kafka包来庭,而且已開啟ack,所以基本排除storm端的問題穿挨。

? ? 現(xiàn)在懷疑kafka里的數(shù)據(jù)本身只有310萬條數(shù)據(jù)月弛,寫了一個程序扔到了kafka集群上探查了一下,印證了自己的想法科盛。果然帽衙,數(shù)據(jù)只有310萬條。現(xiàn)在基本判斷問題的在kafka producer上贞绵。仔細(xì)查看了下producer代碼

props.put("acks","all");

props.put("retries",3);? ? ?

? ? ?"acks" 選項表示kafka 的ack級別:acks=0 意味著producer永遠(yuǎn)不會等待任何一個來自broker的ack厉萝,意味著不需要任何確實,發(fā)送及以為著成功。acks=1 意味著在leader replica已經(jīng)接收到數(shù)據(jù)后谴垫,producer會得到一個ack章母,這個選項對速度與安全性做一個平衡,但是不需要等其他副本確認(rèn)翩剪,如果發(fā)生leader掛了乳怎,其他副本還沒來得及同步,這時就會發(fā)生數(shù)據(jù)丟失的情況前弯。最后一種數(shù)據(jù)最安全的情況就是acks=al蚪缀,l意味著在所有的ISR都接收到數(shù)據(jù)后,producer才得到一個ack博杖。這個選項提供了最好的持久性椿胯,只要還有一個replica存活筷登,那么數(shù)據(jù)就不會丟失剃根,但是相應(yīng)的吞吐量會受到影響。本著對業(yè)務(wù)對數(shù)據(jù)可靠性的要求前方,我選擇了最高的可靠級別狈醉,這點沒毛病。

? ? "retries"選項大于0的值將使客戶端重新發(fā)送任何數(shù)據(jù)惠险,一旦這些數(shù)據(jù)發(fā)送失敗苗傅,會間隔一段時間重試,這個值設(shè)置的就是重試間隔時間班巩。初步懷疑這個值太小渣慕,如果磁盤卡頓,網(wǎng)絡(luò)中斷超過三秒抱慌,是否會丟數(shù)據(jù)逊桦。所以將這個參數(shù)調(diào)大到300。

? ? ?重新打包上傳到storm集群重新跑了一回抑进,數(shù)據(jù)還是丟了30多萬强经。場面一度尷尬。寺渗。問題陷入了僵局匿情。

轉(zhuǎn)機(jī):

? ? 現(xiàn)在的問題已經(jīng)超過了我的認(rèn)知,之前從來沒出現(xiàn)過如此嚴(yán)重的丟數(shù)據(jù)的問題信殊。在網(wǎng)上搜的資料大部分都看過炬称。理論上可靠性可以通過副本解決,沒有類似于我這個種問題涡拘。心想著如果不行转砖,只能更改broker 從page cache同步到硬盤的頻率了。鬼使神差下,我更改了下producer的壓縮格式府蔗,從snappy改到gzip晋控,這次kafka中的消息,竟然只少了2000姓赤。同樣的參數(shù)赡译,只改了下壓縮格式。我又查看下了前兩次用snapp格式不铆,kafka里的消息數(shù)蝌焚,發(fā)現(xiàn)了一個問題,兩次用snappy的時候誓斥,kafka消息數(shù)竟然一模一樣只洒。如果不是玄學(xué)的問題,理論上如果丟消息劳坑,350萬條毕谴,丟相同條數(shù)的信息概率簡直太小了。

? 現(xiàn)在問題似乎已經(jīng)很清晰了距芬,gzip壓縮率要比snappy高涝开,snappy優(yōu)勢在于壓縮速度。壓縮率高意味著單條數(shù)據(jù)要小】蜃校現(xiàn)在基本問題定位在單條數(shù)據(jù)大小的問題舀武。但是為什么producer端沒有異常日志呢。查看一下producer發(fā)送消息的源碼:“Future send(ProducerRecord var1)” producer 發(fā)送消息后會發(fā)揮一個future离斩,這種模式是異步發(fā)送方式银舱,當(dāng)broker返回異常信息時并不會拋出。跛梗,producer.send(producerRecord).get()寻馏,加上get(),將異步改同步茄袖,打包運(yùn)行果然發(fā)送到30萬條左右數(shù)據(jù)時就已經(jīng)拋出異常

kafka.common.MessageSizeTooLargeException

解決:

? 至此問題已經(jīng)定位到操软,下一步解決問題,搜了下stackoverflow宪祥,參考下最高票回答:

Consumer side:fetch.message.max.bytes- this will determine the largest size of a message that can be fetched by the consumer.

Broker side:replica.fetch.max.bytes- this will allow for the replicas in the brokers to send messages within the cluster and make sure the messages are replicated correctly. If this is too small, then the message will never be replicated, and therefore, the consumer will never see the message because the message will never be committed (fully replicated).

Broker side:message.max.bytes- this is the largest size of the message that can be received by the broker from a producer.

Broker side (per topic):max.message.bytes- this is the largest size of the message the broker will allow to be appended to the topic. This size is validated pre-compression. (Defaults to broker'smessage.max.bytes.)

? ? 已完美解決問題聂薪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝗羊,隨后出現(xiàn)的幾起案子藏澳,更是在濱河造成了極大的恐慌,老刑警劉巖耀找,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翔悠,死亡現(xiàn)場離奇詭異业崖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蓄愁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門双炕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撮抓,你說我怎么就攤上這事妇斤。” “怎么了丹拯?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵站超,是天一觀的道長。 經(jīng)常有香客問我乖酬,道長死相,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任咬像,我火速辦了婚禮算撮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘施掏。我一直安慰自己钮惠,他們只是感情好茅糜,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布七芭。 她就那樣靜靜地躺著,像睡著了一般蔑赘。 火紅的嫁衣襯著肌膚如雪狸驳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天缩赛,我揣著相機(jī)與錄音耙箍,去河邊找鬼。 笑死酥馍,一個胖子當(dāng)著我的面吹牛辩昆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旨袒,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼汁针,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砚尽?” 一聲冷哼從身側(cè)響起施无,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎必孤,沒想到半個月后猾骡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年兴想,在試婚紗的時候發(fā)現(xiàn)自己被綠了幢哨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫂便,死狀恐怖嘱么,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顽悼,我是刑警寧澤曼振,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蔚龙,受9級特大地震影響冰评,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜木羹,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一甲雅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坑填,春花似錦抛人、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苍在,卻和暖如春绝页,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寂恬。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工续誉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人初肉。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓酷鸦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牙咏。 傳聞我的和親對象是個殘疾皇子臼隔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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

  • kafka數(shù)據(jù)可靠性深度解讀 Kafka起初是由LinkedIn公司開發(fā)的一個分布式的消息系統(tǒng),后成為Apache...
    it_zzy閱讀 2,002評論 2 20
  • kafka的定義:是一個分布式消息系統(tǒng)眠寿,由LinkedIn使用Scala編寫躬翁,用作LinkedIn的活動流(Act...
    時待吾閱讀 5,309評論 1 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)盯拱,斷路器盒发,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 背景介紹 Kafka簡介 Kafka是一種分布式的例嘱,基于發(fā)布/訂閱的消息系統(tǒng)。主要設(shè)計目標(biāo)如下: 以時間復(fù)雜度為O...
    高廣超閱讀 12,826評論 8 167
  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,461評論 0 34