錦州 做網(wǎng)站茂名網(wǎng)站建設(shè)制作
1. 問題現(xiàn)象描述
20240918,14:22,測(cè)試反饋說kafka有問題,生產(chǎn)者寫入消息的時(shí)候報(bào)錯(cuò),并發(fā)了一張日志截圖,主要報(bào)錯(cuò)如下:
to topic xxxx: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for xxxx-0:120000 ms has passed since batch creation。
The cloud topic xxxx-0 dose not support idempotent and transaction, please use the local topic
第一條報(bào)錯(cuò)的大概意思是寫入超時(shí),也就是網(wǎng)絡(luò)有問題。第二條報(bào)錯(cuò)是說topic不支持冪等和事務(wù),請(qǐng)使用本地topic。
2. 排查過程
2.1 檢查網(wǎng)絡(luò)環(huán)境
這個(gè)kafka實(shí)例是用的阿里云的,服務(wù)和配置我都檢查過,一個(gè)多月沒改動(dòng)了,但還是根據(jù)報(bào)錯(cuò)檢查一下,我先自行在pod中telnet了一下kafka實(shí)例的地址,檢查了白名單,隨后又按照阿里云官方提供的檢查方式,檢查了網(wǎng)絡(luò)、生產(chǎn)、消費(fèi)等方面,都顯示正常。
2.2 檢查kafka topic存儲(chǔ)類型
阿里云上的kafka,創(chuàng)建topic時(shí),可選的存儲(chǔ)是云存儲(chǔ)和local存儲(chǔ),我這邊所有的topic默認(rèn)都是使用的云存儲(chǔ),但是根據(jù)云廠商的回復(fù),客戶端版本如果使用3.0及以上的話,是沒有辦法使用冪等的,就會(huì)導(dǎo)致消息發(fā)送失敗,剛好我問了一下開發(fā),說用的是3.7.1,但開發(fā)說已經(jīng)關(guān)閉了冪等功能。
好吧,到這里排查不下去了,準(zhǔn)備抓包。
2.3 測(cè)試寫入其他topic
這里讓開發(fā)改了一下代碼,看看寫入其他topic是否正常,測(cè)試結(jié)果沒問題,寫其他topic能寫。
2.4 抓包
這里把版本回滾到了消息寫入異常的這一版,pod中用tcpdump 抓和kafka通信的包,讓開發(fā)手動(dòng)觸發(fā)消息寫入,報(bào)文截圖如下:
可以看到上面kafka客戶端版本是3.7.0,我尋思這跟開發(fā)說的一不一樣的,于是把版本發(fā)到能夠正常寫入消息的這一版,繼續(xù)抓包,報(bào)文如下:
新發(fā)現(xiàn),能寫的這個(gè)客戶端是3.7.1,隨后反饋給開發(fā)。
3. 問題原因
最后跟開發(fā)溝通,是因?yàn)樗?.7.1這個(gè)客戶端版本,關(guān)閉了使用冪等功能,所以消息能寫了,其實(shí)不換客戶端版本也沒關(guān)系。
最后問開發(fā)老版本3.7.0是不是沒關(guān)使用冪等,開發(fā)說不記得了,我服了!