Spark streaming kafka无法找到Set的领导者偏移量

时间:2016-09-01 14:12:31

标签: apache-spark spark-streaming

我使用spark streaming'org.apache.spark:spark-streaming_2.10:1.6.1'和'org.apache.spark:spark-streaming-kafka_2.10:1.6.1'连接到kafka经纪人版本0.10.0.1。当我尝试这段代码时:

def messages = KafkaUtils.createDirectStream(jssc,
            String.class,
            String.class,
            StringDecoder.class,
            StringDecoder.class,
            kafkaParams,
            topicsSet)

我收到了这个例外:

    INFO consumer.SimpleConsumer: Reconnect due to socket error: java.nio.channels.ClosedChannelException
Exception in thread "main" org.apache.spark.SparkException: java.nio.channels.ClosedChannelException
org.apache.spark.SparkException: Couldn't find leader offsets for Set([stream,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)
    at org.apache.spark.streaming.kafka.KafkaCluster$.checkErrors(KafkaCluster.scala:365)
    at org.apache.spark.streaming.kafka.KafkaUtils$.getFromOffsets(KafkaUtils.scala:222)
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:484)
    at org.apache.spark.streaming.kafka.KafkaUtils$.createDirectStream(KafkaUtils.scala:607)
    at org.apache.spark.streaming.kafka.KafkaUtils.createDirectStream(KafkaUtils.scala)
    at org.apache.spark.streaming.kafka.KafkaUtils$createDirectStream.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at com.privowny.classification.jobs.StreamingClassification.main(StreamingClassification.groovy:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:731)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

我试图在这个网站上搜索一些答案,但似乎没有答案,你能给我一些建议吗?主题stream不为空。

3 个答案:

答案 0 :(得分:2)

根据经验,我知道可能导致此错误消息的一件事是,如果Spark驱动程序无法使用代理的广告主机名(advertised.host.name中的server.properties)访问kafka代理。即使spark配置使用不同的地址识别kafka代理也是如此。所有经纪人公布的主机名必须可以从Spark驱动程序访问。

这发生在我身上,因为集群在一个单独的AWS账户中运行,经纪人使用内部DNS记录识别自己,这些必须被复制到其他AWS账户。在此之前,我收到此错误消息,因为Spark驱动程序无法访问代理以询问其最新的偏移量,即使我们在spark配置中使用代理的私有IP地址。

希望能有所帮助。

答案 1 :(得分:2)

我也遇到过这个问题。所以你必须改变Kafka上的一些配置。

转到Kafka配置并配置listeners;

在“套接字服务器设置”部分中,格式为:

listeners=PLAINTEXT://[hostname or IP]:[port]

例如:

listeners=PLAINTEXT://192.168.1.24:9092

答案 2 :(得分:0)

我是从HDP运行kafka,所以默认端口是6667而不是9092,当我将bootstrap.servers的端口切换为<hostname>:6667时,问题就解决了。