我正在尝试设置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
有谁知道可能是什么问题?
我正在使用:
答案 0 :(得分:8)
你需要检查两件事:
检查是否存在此主题和分区,在您的情况下,主题为test-topic
且分区为0。
根据你的代码,你正在尝试从偏移量0消费消息,并且可能消息从偏移量0不可用,检查你最早的偏移量并尝试从那里消费。
以下命令检查最早的偏移量:
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时遇到了同样的错误。