1. 程式人生 > >kafka有的partition停止消費問題

kafka有的partition停止消費問題

這個問題是在kafka0.10.0上出現的。在測試叢集重現問題,問題如下圖所示(offsetmonitor的監控頁面)

上圖中可以看到好多partition都在幾小時前就停止了消費。

這種情況下,我們的消費者程式碼(kafka舊的高階api)是不會報錯的。排查過程

1.檢視topic,看這幾個partition的leader在哪幾臺broker上。

2.去kafka解壓目錄檢視log,看server.log.yyyy-MM-dd-HH的log。看看有什麼異常

我們的是因為訊息過大,kafka報java 堆記憶體溢位。

解決方法是,進入kafka/bin目錄下

修改kafka-server-start.sh 將KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"調大(重啟kafka之後問題是可以暫時解決的,目前還沒有找到原因,這周應該可以再找出問題,到時候再來更新)

3.我檢視kafka-server-start.sh發現其實最終啟動kafka是呼叫了kafka-run-class.sh這個指令碼,這個腳本里有也有一個heap引數:

KAFKA_HEAP_OPTS="-Xmx256M" 這個引數我沒在官網找到是控制什麼的。

4.其實後來我們把記憶體調到10G,她也會報記憶體溢位。網上有的人說是kafka啟動腳本里

KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true"

這個引數-XX:+DisableExplicitGC是禁止的,有的人說調這個。但是我沒有調過,因為我們其他專案用的kafka就沒有出現過記憶體溢位的問題,而且資料量也和這個專案的差不多。

5.這個問題其實拖的很久了,但是一直沒時間去研究。而且到現在為止,我也不能確定是生產者問題還是消費者問題。儘量這周研究一下共享出來把。