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.  關閉防火牆,肯定程序可否自恢復,日誌是否正常
二:要把各類基礎服務分開部署,這個涉及到機器的申請,否則測試環境全部服務都部署在一臺機器 或者幾臺機器上,全部網絡都是通的,徹底沒法模擬這種測試環境
相關文章
相關標籤/搜索