Spark Streaming + Kafka:SparkException:无法找到Set的前导偏移

时间:2015-12-15 11:48:05

标签: apache-spark apache-kafka spark-streaming

我正在尝试设置Spark Streaming以从Kafka队列获取消息。我收到以下错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o30.createDirectStream.
: org.apache.spark.SparkException: java.nio.channels.ClosedChannelException
org.apache.spark.SparkException: Couldn't find leader offsets for Set([test-topic,0])
        at org.apache.spark.streaming.kafka.KafkaCluster$$anonfun$checkErrors$1.apply(KafkaCluster.scala:366)
        at org.apache.spark.streaming.kafka.KafkaCluster$$anonfun$checkErrors$1.apply(KafkaCluster.scala:366)
        at scala.util.Either.fold(Either.scala:97)

这是我正在执行的代码(pyspark):

from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils

directKafkaStream = KafkaUtils.createDirectStream(ssc, ["test-topic"], {"metadata.broker.list": "host.domain:9092"})

ssc.start()
ssc.awaitTermination()

有几个类似的帖子有相同的错误。在所有情况下,原因都是空的kafka主题。我的“测试主题”中有消息。我可以用

取出它们
kafka-console-consumer --zookeeper host.domain:2181 --topic test-topic --from-beginning --max-messages 100

有谁知道可能是什么问题?

我正在使用:

  • Spark 1.5.2(apache)
  • Kafka 0.8.2.0 + kafka1.3.0(CDH 5.4.7)

5 个答案:

答案 0 :(得分:8)

你需要检查两件事:

  1. 检查是否存在此主题和分区,在您的情况下,主题为test-topic且分区为0。

  2. 根据你的代码,你正在尝试从偏移量0消费消息,并且可能消息从偏移量0不可用,检查你最早的偏移量并尝试从那里消费。

  3. 以下命令检查最早的偏移量:

    sh kafka/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list "your broker list" --topic "topic name" --time -1 
    

答案 1 :(得分:3)

1)您必须确保已创建主题test-topic

运行以下命令以检查主题列表

kafka-topics.sh --list --zookeeper [host or ip of zookeeper]:[port]

2)检查完主题后,您必须在Socket Server Settings部分配置Kafka配置

listeners=PLAINTEXT://[host or ip of Kafka]:[port]

答案 2 :(得分:1)

如果在/ etc / hosts中定义短主机名并在kafka服务器中使用它们,那么#p>配置,您应该将这些名称更改为IP。或者在本地PC或客户端/ etc / hosts中注册相同的短主机名。

发生错误是因为Spark流式lib无法解析PC或客户端中的短主机名。

答案 3 :(得分:1)

强制创建主题的另一个选项,如果它不存在。您可以通过设置属性" auto.create.topics.enable"来实现此目的。到"真"在kafkaParams这样的地图。

.mobile-links .dropdown {
  position:relative;
  display:inline-block;
  padding:2px 13px 0px;
}

.mobile-links .dropdown-content{
  display:none;
  position:absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  padding: 5px 12px;
  z-index: 1;
}

#dropdown:hover .dropdown-content,
#dropdown.show .dropdown-content {
display:block;
}

使用Scala 2.11和Kafka 0.10版本。

答案 4 :(得分:0)

这种类型的错误的原因之一是找不到指定主题的领导者是一个Kafka服务器配置的问题。

打开您的Kafka服务器配置:

vim ./kafka/kafka-<your-version>/config/server.properties

在&#34;套接字服务器设置&#34;部分,如果主机丢失,请为您的主机提供IP:

listeners=PLAINTEXT://{host-ip}:{host-port}

我正在使用MapR沙箱提供的Kafka设置,并试图通过spark代码访问kafka。由于我的配置缺少IP,我在访问我的kafka时遇到了同样的错误。