1. 程式人生 > >SparkStreaming程式執行報錯SparkStreaming-Kafka- Couldn't find leaders for Set

SparkStreaming程式執行報錯SparkStreaming-Kafka- Couldn't find leaders for Set

 這個異常意思是Spark找不到partition的Leader。檢視監控後發現,在異常發生的時間點,有一個Broker掛掉了。可是對應Topic的replica設定的2,就算掛掉一個,應該有replica頂上啊。後來發現,這是由於存在Partition的Replica沒有跟Leader保持同步更新,也就是通常所說的“沒追上”。

    檢視某個Topic是否存在沒追上的情況:

kafka-topics.sh --describe --zookeeper XXX --topic XXX

觀察其中的Replicas和Isr是否一致,如果出現Isr少於Replicas,則對應Partition存在沒追上的情況

解決方法

    增大num.replica.fetchers的值,此引數是Replicas從Leader同步資料的執行緒數,預設為1,增大此引數即增大了同步IO。經過測試,增大此值後,不再有追不上的情況

確定問題已解決的方法

    啟動出現問題的SparkStreaming程式,在程式正常計算的狀態下,kill掉任意一個Broker後,再觀察執行情況。在增大同步執行緒數之前,kill後SparkStreaming會報同樣的異常,而增大後程序依然正常執行,問題解決