我试图在Windows上干净地启动Kafka 2.10 - 0.8.2.1,但每次启动它时都会遇到恼人的错误。
我刚刚按照Quick Start guide安装了Kafka(除了我自己安装了Zookeeper)。 Kafka和Zookeeper都安装在一台机器上非常基本。
问题 当我运行起始脚本时:
kafka-server-start.bat C:\ kafka_2.10-0.8.2.1 \ config \ server.properties
我收到错误:
错误
[2015-07-14 17:00:45,197] WARN Error when freeing index buffer (kafka.log.OffsetIndex)
java.lang.NullPointerException
at kafka.log.OffsetIndex.kafka$log$OffsetIndex$$forceUnmap(OffsetIndex.scala:301)
at kafka.log.OffsetIndex$$anonfun$resize$1.apply(OffsetIndex.scala:283)
at kafka.log.OffsetIndex$$anonfun$resize$1.apply(OffsetIndex.scala:276)
at kafka.utils.Utils$.inLock(Utils.scala:535)
at kafka.log.OffsetIndex.resize(OffsetIndex.scala:276)
at kafka.log.Log.loadSegments(Log.scala:179)
at kafka.log.Log.<init>(Log.scala:67)
at kafka.log.LogManager$$anonfun$loadLogs$2$$anonfun$3$$anonfun$apply$7$$anonfun$apply$1.apply$mcV
at kafka.utils.Utils$$anon$1.run(Utils.scala:54)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
[2015-07-14 17:00:45,219] INFO Completed load of log test-0 with log end offset 0 (kafka.log.Log)
我观察到的内容
当我删除Kafka日志文件夹时,第一次重新运行启动脚本时不会出现错误。 Kafka日志文件夹路径:
C:\ TMP \卡夫卡-日志
我试图使用提供的脚本停止服务,但它没有帮助。服务器停止脚本:
卡夫卡服务器的stop.bat
虽然我第二次启动它时会出现同样的错误,但Kafka启动仍在继续,似乎它正常工作。
帮助
如何摆脱上述错误?
答案 0 :(得分:0)
这个例外不应该是启动时的问题,但是如果你想摆脱它,我想你必须为它提交一个Jira。
这似乎与KAFKA-1008和this commit有关。
答案 1 :(得分:0)
/**
* Forcefully free the buffer's mmap. We do this only on windows.
*/
private def forceUnmap(m: MappedByteBuffer) {
try {
if(m.isInstanceOf[sun.nio.ch.DirectBuffer])
(m.asInstanceOf[sun.nio.ch.DirectBuffer]).cleaner().clean()
} catch {
case t: Throwable => warn("Error when freeing index buffer", t)
}
}
当索引文件大小== 0时,clean where为null