Windows上的Kafka - 启动服务错误

时间:2015-07-14 15:56:48

标签: windows hadoop apache-kafka

我试图在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启动仍在继续,似乎它正常工作。

帮助
如何摆脱上述错误?

2 个答案:

答案 0 :(得分:0)

这个例外不应该是启动时的问题,但是如果你想摆脱它,我想你必须为它提交一个Jira。

这似乎与KAFKA-1008this 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

https://github.com/apache/kafka/pull/1718