kafka配置的問題排查


問題反饋: xx現場測試環境下,整個平台的數據,除了原始數據模塊,其他模塊正常運行。相同版本的包,在線上環境上原始數據的訂閱是正常的,但是測試環境沒有,查看所有相關的日志,均沒有報異常,且日志中有正常顯示已經把數據發送到kafka。但是從kafka的日志里查,沒有收到轉發過來的數據。
 
這里梳理一下這個 原始數據 的整個流程:
upload 轉發 原始數據到 kafka,用的topic為 OREGINAL_DATA ,   storm計算啟動一個叫realtime的拓撲,消費 OREGINAL_DATA 上的數據,再把處理后的數據轉發到 kafka, 用的topic為  OREGINAL_DATA_FORWARD。
 
排查過程:
1. 查看 upload日志,確定日志中有正常發數據到kafka ,且顯示成功了   -- 這個日志有一個很大的誤導作用
2. 通過 kafka 的消息積壓命令查看(如下),確定是沒有新的信息生產(logSize沒有變化,通過kafka的 log.dirs 也確定該topic沒有 生產到數據)
          kafka-consumer-offset-checker.sh   --topic OREGINAL_DATA --zookeeper zkIP:2181 --group GROUP_OREGINAL_DATA
3. 通過第2步的排除,懷疑 upload機器與kafka集群不通,用ping命令,確定機器是通的,查看 iptables ,沒有信息, 用 telnet   kafkaIP   9092 ,不通,提供沒有路由(no route to host),懷疑是hosts文件配置問題,確認有正常配置。 把 kafka上的防火牆關了,telnet 通了(這里還要惡補一下防火牆的知識,另外,這個是測試環境,所以可以直接關)。
4. 發數據,重復2,問題還是沒有解決。通過修改程序中 topic為 OREGINAL_DATA_NEW 確定 程序是否與 kafka集群通。發現topic有正常創建,但是就是沒有消息生產出來。
5. 在upload機器上安裝 kafka,通過運行kafka自帶的producer 行(命令如下),給新建的topic發數據,發現有報錯:
         kafka-console-producer.sh --broker-list kafkaIP:9092 --topic  OREGINAL_DATA_NEW
    報錯信息為:  org.apache.kafka.common.errors.TimeoutException,通過網上搜索,定位原因是發布到zookeeper的advertised.host.name如果沒有設置,默認取 java.net.InetAddress.getCanonicalHostName().值,被用於生產端和消費端。因此外部網絡或者未配置hostname映射的機器訪問kafka集群時就會有網絡問題了。
 
6. 配置 kafka 集群的主機名到 upload 機器的hosts 文件中, 發數據,問題解決。
 
這里注明一下,upload表本來是有配置 kafka集群的,但是用的是別名,且 公共配置文件上相關集群機器的配置信息也是用的別名,當時測試用的命令,也是別名。
 
 
關於測試這邊的疏漏問題總結:
以前測試都是直接在公共配置文件用的主機名測試(這里用的主機別名的方式還沒遇到過),另外,在kafka集群不通的情況下,upload日志居然沒有報一點異常,還顯示成功,這里對於 異常 情況的測試用例設置有些欠缺,后期要專門整理對程序的異常處理情況做測試,來驗證程序的健壯性及自我恢復能力。
一: 通過控制防火牆來模擬網絡異常的情況
    1.  在環境正常情況下,把 防火牆打開,確定程序是否正常,日志有沒有對應的異常信息協助定位問題
    2.  關閉防火牆,確定程序能否自恢復,日志是否正常
二:要把各種基礎服務分開部署,這個涉及到機器的申請,不然測試環境所有服務都部署在一台機器 或者幾台機器上,所有網絡都是通的,完全無法模擬這種測試環境
 


免責聲明!

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



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