背景
在學習Flink的流處理API時,不可避免地要學Kafka。
問題
在啓動Kafka的服務器時,報了一堆錯誤,關鍵的錯誤如下
java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:944)
at kafka.log.AbstractIndex$$anonfun$resize$1.apply(AbstractIndex.scala:115)
at kafka.log.AbstractIndex$$anonfun$resize$1.apply(AbstractIndex.scala:105)
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:213)
at kafka.log.AbstractIndex.resize(AbstractIndex.scala:105)
at kafka.log.LogSegment.recover(LogSegment.scala:256)
at kafka.log.Log.kafka$log$Log$$recoverSegment(Log.scala:342)
at kafka.log.Log.recoverLog(Log.scala:427)
at kafka.log.Log.loadSegments(Log.scala:402)
at kafka.log.Log.<init>(Log.scala:186)
at kafka.log.Log$.apply(Log.scala:1609)
解決方法
1、確認自己的java是64位的,確認方法就是輸入java -version,在輸出信息裏,看到64 bit字樣,即爲64位,否則就是32位。如下圖所示
如果不對,就去java官網下載windows的x64(不是x86)版本,重新安裝後,更新環境變量即可
2、如果還不行,就修改kafka\bin\windows目錄下的kafka-run-class.bat文件,在set COMMAND一行,把KAFKA_HEAP_OPTS變量去掉,自己強行指定堆棧大小。修改後的這一行爲
set COMMAND=%JAVA% -Xmx512M -Xms256M %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*
結語
方法1是我最終的解決方法,又一次弄混了x86和x64,真是自己坑自己..