Windows10啓動Kafka報錯java.lang.OutOfMemoryError: Map failed

背景

在學習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,真是自己坑自己..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章