Kafka服务器启动失败 - java.io.IOException:映射失败

8

由于以下错误,我无法启动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$1.apply(LogManager.scala:365)
    at kafka.log.LogManager$$anonfun$createLog$1.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$1.apply(Partition.scala:109)
    at kafka.cluster.Partition$$anonfun$getOrCreateReplica$1.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$4$$anonfun$apply$3.apply(Partition.scala:166)
    at kafka.cluster.Partition$$anonfun$4$$anonfun$apply$3.apply(Partition.scala:166)
    at scala.collection.mutable.HashSet.foreach(HashSet.scala:78)
    at kafka.cluster.Partition$$anonfun$4.apply(Partition.scala:166)
    at kafka.cluster.Partition$$anonfun$4.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$4.apply(ReplicaManager.scala:754)
    at kafka.server.ReplicaManager$$anonfun$makeLeaders$4.apply(ReplicaManager.scala:753)
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99)
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.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

尝试了以下选项,但没有用。请帮忙。

将操作系统从32位升级到64位。
将Java堆大小增加到1 GB。
卸载并重新安装Apache Kafka。


你的kafka版本是什么? - Maximilien Belinga
JVM 是问题所在。我之前使用的是 32 位的 JVM,升级到 64 位后问题得以解决。谢谢。 - Gopi
2
好的,很棒。那你应该发布答案!这可能对其他人有所帮助。 - Maximilien Belinga
5个回答

16

当这不能解决问题时,您可以尝试增加vm.max_map_count。默认值为65536(用sysctl vm.max_map_count检查此值)。

使用cat /proc/[kafka-pid]/maps | wc -l,您可以看到使用了多少个映射。

通过以下方法增加设置:

sysctl -w vm.max_map_count=262144

我们做出了改变,增加最大内存映射计数后,我们不再遇到问题了。 - Shrikant Salgar
1
有没有 Windows 的设置? - Jaison

12

将JVM升级到64位解决了这个问题


7

这对我很有帮助: 将KAFKA_HEAP_OPTS从“-Xmx256M -Xms256M” (原先为512m)更改为kafka-server-start脚本。

谢谢!


1
令人惊讶的是,减少内存也解决了我的问题。 - ccu
这在我的Windows设置上运行良好。 - cody.tv.weber

2
这对我很有帮助: 更改: export KAFKA_HEAP_OPTS="-Xmx512M -Xms512M" (原本是1G)
在kafka-server-start脚本中。

1
我在Windows上遇到了同样的问题,Kafka在处理过程中会占用一些内存。因此,我们需要增加堆大小以防止限制应用程序的性能。这可以通过JAVA控制面板以图形方式实现。

enter image description here

在运行时参数中,您可以更改JVM分配的内存大小:
  • -Xmx512m 分配512MB内存,
  • -Xmx1024m 分配1GB内存,
  • -Xmx2048m 分配2GB内存,
  • -Xmx3072m 分配3GB内存等等。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接