Apache Kafka:带有Spark Streaming的超时例外

时间:2016-09-04 03:47:43

标签: apache-spark apache-kafka spark-streaming kafka-consumer-api kafka-producer-api

背景 我在Scala中使用了Kafka的Spark Streaming程序。我的目的是将文件读取到Kafka并将这些消息发布到Spark Streaming应用程序以进行一些分析。

问题 但是,当我将文件传输到Kafka并启动我的Streaming应用程序来侦听特定主题时,我在Kafka生产者控制台上看到了这些错误消息。

用于读取文件的命令:

C:\Kafka\bin\windows>kafka-console-producer --broker-list localhost:9092 --topic mytopic2 < C:\somefile.csv

错误:

[2016-09-04 10:08:42,122] ERROR Error when sending message to topic mytopic2 w
h key: null, value: 116 bytes with error: (org.apache.kafka.clients.producer.i
ernals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Batch containing 109 record(s
expired due to timeout while requesting metadata from brokers for mytopic2-0
[2016-09-04 10:08:42,122] ERROR Error when sending message to topic mytopic2 w
h key: null, value: 116 bytes with error: (org.apache.kafka.clients.producer.i
ernals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Batch containing 109 record(s
expired due to timeout while requesting metadata from brokers for mytopic2-0
[2016-09-04 10:08:42,122] ERROR Error when sending message to topic mytopic2 w
h key: null, value: 116 bytes with error: (org.apache.kafka.clients.producer.i
ernals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Batch containing 109 record(s
expired due to timeout while requesting metadata from brokers for mytopic2-0
[2016-09-04 10:08:42,122] ERROR Error when sending message to topic mytopic2 w
h key: null, value: 116 bytes with error: (org.apache.kafka.clients.producer.i
ernals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Batch containing 109 record(s
expired due to timeout while requesting metadata from brokers for mytopic2-0

我在本地Windows机器上运行此应用程序,Kafka服务器也在我的机器上本地运行。

Spark应用程序看起来像:

val kafkaParams = Map("metadata.broker.list" -> "localhost:9092")        
val topics = List("mytopic2").toSet
val lines = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics).map(_._2)     

lines.foreachRDD((rdd, time) => {
// do something
}

我不确定Kafka / Spark的错误究竟意味着什么。

任何指示即将继续。

2 个答案:

答案 0 :(得分:0)

该错误与Spark / Spark Streaming无关。 看起来您的Kafka设置存在一些问题。

当Zookeeper设置出现问题时,通常会发生超时错误。你有没有正确配置你的zookeeper? 确保正确设置。另外,尝试运行简单的Kafka生产商&amp;消费者脚本首先由Kafka提供。

答案 1 :(得分:0)

这毕竟是卡夫卡的一个问题。我怀疑这与我下载的用于Spark Streaming的Kafka版本有很大关系,而与Kafka设置本身关系不大。

我为Spark Streaming 1.6.2下载了Kafka 0.10.0.x - &gt;这是我收到TimeOut错误的时候。 我找到了这个链接:https://spark.apache.org/docs/1.6.2/streaming-programming-guide.html#linking,其中声明:“ Kafka:Spark Streaming 1.6.2与Kafka 0.8.2.1兼容。”。

所以,当我下载0.8.2.1时,它工作正常 - 我不再得到“TimeOut Errors”了。