Kafka 服务器启动失败 - java.io.IOException: 映射失败
Kafka server failed to start - java.io.IOException: Map failed
由于以下错误,我无法启动 Kafka 服务器。
java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:940)
at kafka.log.AbstractIndex.<init>(AbstractIndex.scala:61)
at kafka.log.TimeIndex.<init>(TimeIndex.scala:55)
at kafka.log.LogSegment.<init>(LogSegment.scala:73)
at kafka.log.Log.loadSegments(Log.scala:267)
at kafka.log.Log.<init>(Log.scala:116)
at kafka.log.LogManager$$anonfun$createLog.apply(LogManager.scala:365)
at kafka.log.LogManager$$anonfun$createLog.apply(LogManager.scala:361)
at scala.Option.getOrElse(Option.scala:121)
at kafka.log.LogManager.createLog(LogManager.scala:361)
at kafka.cluster.Partition$$anonfun$getOrCreateReplica.apply(Partition.scala:109)
at kafka.cluster.Partition$$anonfun$getOrCreateReplica.apply(Partition.scala:106)
at kafka.utils.Pool.getAndMaybePut(Pool.scala:70)
at kafka.cluster.Partition.getOrCreateReplica(Partition.scala:105)
at kafka.cluster.Partition$$anonfun$$anonfun$apply.apply(Partition.scala:166)
at kafka.cluster.Partition$$anonfun$$anonfun$apply.apply(Partition.scala:166)
at scala.collection.mutable.HashSet.foreach(HashSet.scala:78)
at kafka.cluster.Partition$$anonfun.apply(Partition.scala:166)
at kafka.cluster.Partition$$anonfun.apply(Partition.scala:160)
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:213)
at kafka.utils.CoreUtils$.inWriteLock(CoreUtils.scala:221)
at kafka.cluster.Partition.makeLeader(Partition.scala:160)
at kafka.server.ReplicaManager$$anonfun$makeLeaders.apply(ReplicaManager.scala:754)
at kafka.server.ReplicaManager$$anonfun$makeLeaders.apply(ReplicaManager.scala:753)
at scala.collection.mutable.HashMap$$anonfun$foreach.apply(HashMap.scala:99)
at scala.collection.mutable.HashMap$$anonfun$foreach.apply(HashMap.scala:99)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
at scala.collection.mutable.HashMap.foreach(HashMap.scala:99)
at kafka.server.ReplicaManager.makeLeaders(ReplicaManager.scala:753)
at kafka.server.ReplicaManager.becomeLeaderOrFollower(ReplicaManager.scala:698)
at kafka.server.KafkaApis.handleLeaderAndIsrRequest(KafkaApis.scala:148)
at kafka.server.KafkaApis.handle(KafkaApis.scala:84)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:62)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:937)
... 34 more
尝试了以下选项。但没有用。请帮忙
OS 从 32 位升级到 64 位。
将 java 堆大小增加到 1 GB。
卸载并安装 Apache Kafka
将 JVM 升级到 64 位解决了问题
如果这不能解决问题,您可以尝试增加 vm.max_map_count。默认值为 65536(使用 sysctl vm.max_map_count
进行检查)
使用cat /proc/[kafka-pid]/maps | wc -l
你可以看到使用了多少地图。
增加设置:
sysctl -w vm.max_map_count=262144
我在 Windows 上遇到了同样的问题,Kafka 在此过程中占用了一些内存。所以我们需要增加堆来防止限制应用程序的性能。这可以通过 JAVA 控制面板以图形方式实现。
在Runtime Parameters里面,你可以改变JVM分配的内存大小:
- -Xmx512m 分配512MB,
- -Xmx1024m 分配1GB,
- -Xmx2048m 分配2GB,
- -Xmx3072m 分配3GB内存等等
这对我有帮助:
改变 :
export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M"
(原本1G)
在 kafka-server-start 脚本中
这对我有帮助:更改 KAFKA_HEAP_OPTS="-Xmx256M -Xms256M"(原 512m)
将其更改为:kafka-server-start 脚本
谢谢!
由于以下错误,我无法启动 Kafka 服务器。
java.io.IOException: Map failed
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:940)
at kafka.log.AbstractIndex.<init>(AbstractIndex.scala:61)
at kafka.log.TimeIndex.<init>(TimeIndex.scala:55)
at kafka.log.LogSegment.<init>(LogSegment.scala:73)
at kafka.log.Log.loadSegments(Log.scala:267)
at kafka.log.Log.<init>(Log.scala:116)
at kafka.log.LogManager$$anonfun$createLog.apply(LogManager.scala:365)
at kafka.log.LogManager$$anonfun$createLog.apply(LogManager.scala:361)
at scala.Option.getOrElse(Option.scala:121)
at kafka.log.LogManager.createLog(LogManager.scala:361)
at kafka.cluster.Partition$$anonfun$getOrCreateReplica.apply(Partition.scala:109)
at kafka.cluster.Partition$$anonfun$getOrCreateReplica.apply(Partition.scala:106)
at kafka.utils.Pool.getAndMaybePut(Pool.scala:70)
at kafka.cluster.Partition.getOrCreateReplica(Partition.scala:105)
at kafka.cluster.Partition$$anonfun$$anonfun$apply.apply(Partition.scala:166)
at kafka.cluster.Partition$$anonfun$$anonfun$apply.apply(Partition.scala:166)
at scala.collection.mutable.HashSet.foreach(HashSet.scala:78)
at kafka.cluster.Partition$$anonfun.apply(Partition.scala:166)
at kafka.cluster.Partition$$anonfun.apply(Partition.scala:160)
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:213)
at kafka.utils.CoreUtils$.inWriteLock(CoreUtils.scala:221)
at kafka.cluster.Partition.makeLeader(Partition.scala:160)
at kafka.server.ReplicaManager$$anonfun$makeLeaders.apply(ReplicaManager.scala:754)
at kafka.server.ReplicaManager$$anonfun$makeLeaders.apply(ReplicaManager.scala:753)
at scala.collection.mutable.HashMap$$anonfun$foreach.apply(HashMap.scala:99)
at scala.collection.mutable.HashMap$$anonfun$foreach.apply(HashMap.scala:99)
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230)
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40)
at scala.collection.mutable.HashMap.foreach(HashMap.scala:99)
at kafka.server.ReplicaManager.makeLeaders(ReplicaManager.scala:753)
at kafka.server.ReplicaManager.becomeLeaderOrFollower(ReplicaManager.scala:698)
at kafka.server.KafkaApis.handleLeaderAndIsrRequest(KafkaApis.scala:148)
at kafka.server.KafkaApis.handle(KafkaApis.scala:84)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:62)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: Map failed
at sun.nio.ch.FileChannelImpl.map0(Native Method)
at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:937)
... 34 more
尝试了以下选项。但没有用。请帮忙
OS 从 32 位升级到 64 位。
将 java 堆大小增加到 1 GB。
卸载并安装 Apache Kafka
将 JVM 升级到 64 位解决了问题
如果这不能解决问题,您可以尝试增加 vm.max_map_count。默认值为 65536(使用 sysctl vm.max_map_count
进行检查)
使用cat /proc/[kafka-pid]/maps | wc -l
你可以看到使用了多少地图。
增加设置:
sysctl -w vm.max_map_count=262144
我在 Windows 上遇到了同样的问题,Kafka 在此过程中占用了一些内存。所以我们需要增加堆来防止限制应用程序的性能。这可以通过 JAVA 控制面板以图形方式实现。
在Runtime Parameters里面,你可以改变JVM分配的内存大小:
- -Xmx512m 分配512MB,
- -Xmx1024m 分配1GB,
- -Xmx2048m 分配2GB,
- -Xmx3072m 分配3GB内存等等
这对我有帮助:
改变 :
export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M"
(原本1G)
在 kafka-server-start 脚本中
这对我有帮助:更改 KAFKA_HEAP_OPTS="-Xmx256M -Xms256M"(原 512m)
将其更改为:kafka-server-start 脚本
谢谢!