問題集僅為個人實踐,若有不准確的,歡迎交流!
一、現象:
集群有3台kafka服務器,而kafka 的9002界面上broker僅有2個;log.dirs配置路徑為/data/kafka/data,而創建的topic數據都存放在默認路徑下/tmp/kafka-logs。
二、分析過程
檢查server.properties中log.dirs目錄配置正確。查看日志目錄,發現報錯如下:
FATAL kafka.server.KafkaServer {...},Fatal error during kafkaServer startup.....:Socket sever failed to bind to 0.0.0.0:9092:地址已在被使用 |
從報錯信息上可知,應該是端口號被占用了,停止kafka服務,使用命令:
lsof -i:9092
查看發現還有進程使用9092端口,kill到相應進程,重啟服務,恢復正常。
三、延伸
啟動kafka后,新建topic的數據所在地址正確了,但consumer的位置文件__consumer_offset_可能還在之前的/tmp/kafka-logs下,此時,可以嘗試在kafka 9002界面上刪除__consumer_offset_后,重啟kafka服務。
不好但可行的方案:可以手動刪除/tmp/kafka-logs下所有的文件,重啟kafka服務,一切恢復正常。后遺症是:使用--list 選項查詢topic時,可能還能存在,此時想徹底刪除只能執行非常不推薦的方法:手動刪除zookeeper目錄下對應文件。
四、總結
發現報錯信息以后可以多分析報錯信息 at.....后面的提示信息。