生產環境中使用Kafka作為日志處理的中間件,系統結構是這樣的。自12月上線一個多月來,系統運行穩定。
用過kafka的都知道,Kafka產生的消息全部存儲到硬盤文件中,並且在消息被消費后不會被立即刪除。kafka會根據配置的刪除策略,定時清理。
生產環境中,Kafka是部署在Windows2012下的,經過1個月的運行,發現kafka產生的日志文件很大,進一步分析Kafka的日志文件,發現存在很多過期的日志文件。
進一步查看系統產生的日志,發現系統存在異常:kafka.common.KafkaStorageException: Failed to change the log file suffix from to .deleted for log segment 49121。
到github搜索了一下,果然發現了這個bug,只有windows下才有這個問題,郁悶。而且這個bug計划在0.10.0版本中解決,現在是0.9.0才剛剛發布,0.10.0還不知道啥時候發布呢。
https://github.com/apache/kafka/pull/154
好在已經有大牛把解決問題的源代碼貼出來了,只能自己動手修改編譯了。首先從https://git-wip-us.apache.org/repos/asf?p=kafka.git;a=summary 下載最新的源代碼包,注意不要下載老的,否則編譯不通過。下載到最新代碼后,參考: https://github.com/apache/kafka/pull/154 把修改的代碼合並進去,然后按照github的知道搭建gradle編譯環境,編譯前兩步即可。
編譯完成后,在源代碼Core目錄會新生成Build文件夾,此處存放了所有編譯生成的交付物。把libs和dependant-libs-XXX目錄合並后,覆蓋到kafka的運行環境/libs目錄即可。






