kafka broker 進入 conflicted ephemeral node 死循環


轉載請注明原創地址 http://www.cnblogs.com/dongxiao-yang/p/5621303.html

 

最近發現kafka一台服務器producer客戶端寫入時一直報錯,查看該broker服務日志發現日志一直輸出下面的內容,看上去應該是broker嘗試在zk上注冊節點但是產生了session沖突之類的問題。

[2016-06-27 17:05:56,608] INFO I wrote this conflicted ephemeral node [{"jmx_port":9999,"timestamp":"1467018354343","host":"xxx.kafka.hadoop.qingdao.youku","version":1,"port":9090}] at /brokers/ids/15 a while back in a different session, hence I will backoff for this node to be deleted by Zookeeper and retry (kafka.utils.ZkUtils$)

google發現與下列jira上的bug表述的問題是一樣的,尤其是1387上James Lent 描述的bug復現過程基本解釋清楚了為什么會產生這個問題。

https://issues.apache.org/jira/browse/KAFKA-1393

https://issues.apache.org/jira/browse/KAFKA-1387

注意這句話 Kafka broker re-registers itself in zookeeper every time handleNewSession() callback is invoked.

 

    def handleNewSession() {
      info("re-registering broker info in ZK for broker " + brokerId)
-->   register()
      info("done re-registering broker")
      info("Subscribing to %s path to watch for new topics".format(ZkUtils.BrokerTopicsPath))
    }

假定有下列場景

1 kafka服務端的zkclient與zk服務器session超時,我們給這個session取名為session-a

2 zkclient重新與zkserver建立session-b,但是handleNewSession()事件卡住沒有觸發,我們給這次方法回調起名handleNewSession-a

3 session-b再次超時

5 繼續重連進入session-c,handleNewSession()注冊臨時節點成功,session-c穩定存在

6 handleNewSession-a 調用,但是handleNewSession-a持有的是session-b無法成功

7  handleNewSession-a 不斷重試建立連接,進入死循環。

 

查看zk日志發現出現問題的broker的確在zkserver產生了三次Accepted socket connection行為,其中第三次連接建立后broker日志開始產生conflicted ephemeral node錯誤日志並不斷死循環,所以證明該服務器的確是經歷了上述過程,重啟broker后問題解決,但是broker服務器handleNewSession第一次阻塞的原因暫時還沒有查清楚,目前看來跟集群reblance有關系

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM