Kafka的Producer以及Consumer遠程調用問題


  公司需要分布式的JMS,所以研究了Kafka,之前在本地都沒有出現問題,但是在服務器上布Kafka的時候發現了消費者無法消費的問題。

  kafka布到一台服務器上面,由於業務原因,producer和kafka放到一台服務器上面,所以producer發送消息的時候bootrstrap.servers只要配置localhost:port就可以了,但是consumer是在另一台服務器上面,修改了bootstrap.servers為kafka服務器的ip和端口發現還是無法消費。

  出現問題1:kakfa的consumer不報錯,但是無法消費。

  解決問題1:在broker配置中加入如下配置

  advertised.host.name=xxx.xx.xx.xx
  advertised.listeners=PLAINTEXT://xxx.xx.xx.xx:port

  配置完了之后發現還是無法消費。

  出現問題2:no route to host

  解決問題2:管理kakfa的zookeeper端口號未暴露在外網,將zookeeper的端口設置成外網可以訪問。(具體方法百度,樓主也是百度的,linux不太熟練)

  配置完了之后發現還是無法消費,我去了。

  出現問題3:no route to host

  解決問題3:發現了kafka的端口也需要暴露給consumer,我疏忽了,和問題2同樣的方法暴露端口。

  配置完了之后發現還是無法消費,我已經崩潰了。

  出現問題4:MDGG,沒有報錯,什么錯都沒有。

  解決問題4:哈哈哈,樓主將consumer配置中的group.id換了一個就可以啦。

  終於可以消費了......

 

  總結:

  1.注意服務器的對外訪問的端口是不是可用。

  2.修改broker配置加入advertised等配置信息。

  3.記得修改一下consumer消費者組,如果修改組不行,那么先刪除zookeeper的kafka消息記錄,然后再還consumer組試試。

  樓主分析修改消費者組就能消費的原因可能是,未修改之前,zookeeper默認還是記得這個消費者組消費的是之前的kafka里面的數據,但是之前的kakfa是本地,所以這個消費者組沒有被糾正或者告知你要訪問新的kafka服務器,所以在修改為新的消費者組的時候,zookeeper重新記錄的消費者的信息,就可以消費新服務器的消息了。

  

  


免責聲明!

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



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