成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

kafka故障排查-consumer處理超時(shí)導(dǎo)致的異常

最近遇到一個(gè)kafka方面的問(wèn)題,大致就是由于consumer處理業(yè)務(wù)超時(shí),導(dǎo)致無(wú)法正常提交Offset,進(jìn)而導(dǎo)致無(wú)法消費(fèi)新消息的問(wèn)題。下面我想從以下幾個(gè)方面對(duì)此次故障排查進(jìn)行復(fù)盤(pán)分析:業(yè)務(wù)背景、問(wèn)題描述、排查思路、經(jīng)驗(yàn)教訓(xùn)。

創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比海州網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式海州網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋海州地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴(lài)。

一、業(yè)務(wù)背景

先簡(jiǎn)單描述一下業(yè)務(wù)背景吧。我們有個(gè)業(yè)務(wù)需要嚴(yán)格按順序消費(fèi)Topic消息,所以針對(duì)該topic設(shè)置了唯一的partition,以及唯一的副本。當(dāng)同一個(gè)消費(fèi)組的多個(gè)consumer啟動(dòng)時(shí),只會(huì)有一個(gè)consumer訂閱到該Topic,進(jìn)行消費(fèi),保證同一個(gè)消費(fèi)組內(nèi)的消費(fèi)順序。
注:消費(fèi)組的groupId名稱(chēng)為“smart-building-consumer-group”,訂閱的Topic名稱(chēng)為“gate_contact_modify”。
kafka故障排查-consumer處理超時(shí)導(dǎo)致的異常

二、問(wèn)題描述

有一天我們突然收到一個(gè)問(wèn)題反饋:producer側(cè)的業(yè)務(wù)產(chǎn)生消息后,consumer側(cè)并沒(méi)有得到預(yù)期的結(jié)果。經(jīng)過(guò)排查,排除了業(yè)務(wù)邏輯出現(xiàn)問(wèn)題的可能性,我們判斷最有可能是因?yàn)閗afka消息沒(méi)有被消費(fèi)到。為了印證這個(gè)猜測(cè),我們查看了consumer消費(fèi)日志,發(fā)現(xiàn)日志中存在這樣幾處問(wèn)題:
(1)日志偶爾會(huì)打印出一條Kafka的警告日志,內(nèi)容為:
org.springframework.kafka.KafkaListenerEndpointContainer#2-0-C-1 org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.maybeAutoCommitOffsetsSync:648 - Auto-commit of offsets {gate_contact_modify-0=OffsetAndMetadata{offset=2801, metadata=''}} failed for group smart-building-consumer-group: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records.
(2)接著進(jìn)行了一次rebalance;
(3)consumer側(cè)輸出了Topic消費(fèi)者的業(yè)務(wù)日志,表明正常獲取到了Topic消息。
接著我們查看kafka 消費(fèi)組中該Topic對(duì)應(yīng)的Offset的變化情況,發(fā)現(xiàn)Offset一直沒(méi)有變化。
kafka故障排查-consumer處理超時(shí)導(dǎo)致的異常

三、排查思路

日志中的異常信息很明確的告知我們,topic消息消費(fèi)完成后,由于group發(fā)生了一次rebalance,導(dǎo)致Commit沒(méi)有被提交,這表明兩次poll消息的間隔時(shí)間超過(guò)了max.poll.interval.ms定義的最大間隔,這也意味著一次poll后處理消息的過(guò)程超時(shí)了,正是由于poll間隔時(shí)間超時(shí),導(dǎo)致了一次rebalance。同時(shí)建議我們要么增加間隔時(shí)間,要么減少每次拉取的最大消息數(shù)。
另外,由于Commit沒(méi)有被提交,導(dǎo)致OffSet值沒(méi)有變化,那么每次拉取到的消息都是同一批重復(fù)消息。具體的異常流程如下圖:

kafka故障排查-consumer處理超時(shí)導(dǎo)致的異常

根據(jù)上述信息,我們進(jìn)一步檢查了consumer的max.poll.records配置、max.poll.interval.ms配置,并統(tǒng)計(jì)了每條Topic消息的處理耗時(shí),發(fā)現(xiàn)max.poll.records使用了默認(rèn)配置值500,max.poll.interval.ms使用了默認(rèn)配置值為300s,而每條Topic消息的處理耗時(shí)為10S。這進(jìn)一步證實(shí)了我們的推論:
由于每次拉取的消息數(shù)太多,而每條消息處理時(shí)間又較長(zhǎng),導(dǎo)致每次消息處理時(shí)間超過(guò)了拉取時(shí)間間隔,從而使得group進(jìn)行了一次rebalance,導(dǎo)致commit失敗,并最終導(dǎo)致下次拉取重復(fù)的消息、繼續(xù)處理超時(shí),進(jìn)入一個(gè)死循環(huán)狀態(tài)。
知道問(wèn)題根源后,我們結(jié)合業(yè)務(wù)特點(diǎn),更改了max.poll.records=1,每次僅拉取一條消息進(jìn)行處理,最終解決了這個(gè)問(wèn)題。

四、經(jīng)驗(yàn)教訓(xùn)

這次故障排查,使我們對(duì)Kafka消息poll機(jī)制、rebalance和commit之間的相互影響等有了更深的理解。
(1)kafka每次poll可以指定批量消息數(shù),以提高消費(fèi)效率,但批量的大小要結(jié)合poll間隔超時(shí)時(shí)間和每條消息的處理時(shí)間進(jìn)行權(quán)衡;
(2)一旦兩次poll的間隔時(shí)間超過(guò)閾值,group會(huì)認(rèn)為當(dāng)前consumer可能存在故障點(diǎn),會(huì)觸發(fā)一次rebalance,重新分配Topic的partition;
(3)如果在commit之前進(jìn)行了一次rebalance,那么本次commit將會(huì)失敗,下次poll會(huì)拉取到舊的數(shù)據(jù)(重復(fù)消費(fèi)),因此要保證好消息處理的冪等性;

本文名稱(chēng):kafka故障排查-consumer處理超時(shí)導(dǎo)致的異常
URL地址:http://jinyejixie.com/article40/ipigho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、云服務(wù)器移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
南昌市| 潍坊市| 隆尧县| 利辛县| 芦山县| 贵定县| 贞丰县| 滨州市| 乌鲁木齐市| 饶河县| 东乡族自治县| 临安市| 莎车县| 江门市| 乌拉特前旗| 上杭县| 囊谦县| 扶余县| 高要市| 嘉黎县| 辛集市| 德州市| 米易县| 都兰县| 深水埗区| 西华县| 闽侯县| 鹰潭市| 巩义市| 都昌县| 庐江县| 灌南县| 唐山市| 阿瓦提县| 岢岚县| 浙江省| 游戏| 合川市| 玉环县| 永昌县| 潢川县|