使用Intelli idea調試kafka low consumer時,由於broker存儲的message有中文,
idea中console端是可以正確顯示的
然后mvn package打包到服務器上執行,結果中文亂碼。
然后在kafka consumer代碼中byte轉為string時,使用了各種編碼
String mes = new String(bytes,"UTF-8"); String mes = new String(bytes,"GBK"); String mes = new String(bytes,"iso8859-1");
問題還是沒有解決。然后一直google,擺渡,看到有人說到jvm的默認編碼會影響程序的編碼,於是在程序中把
Charset.defaultCharset()打印出來,結果,在idea中顯示的是UTF-8,在服務器上執行時就變成了US-ASCII。
我整個工程都是以UTF-8編碼的,難怪在服務器上中文會亂碼了。問題找到了,然后又經過一番折騰,終於解決了問題
在/etc/profile添加HADOOP_OPT="-Dfile encoding=UTF-8",保存退出 source /etc/profile,重新執行
hadoop jar kafkaHdfs-1.0-SNAPSHOT-jar-with-dependencies.jar org.conan.kafka.AllTopicsConsumer ./hdfs.properties