Gao*_*uan 5 apache-kafka apache-spark spark-structured-streaming
这是我用来通过Spark结构化流从Kafka读取数据的代码,
//ss:SparkSession is defined before.
import ss.implicits._
val df = ss
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", kafka_server)
.option("subscribe", topic_input)
.option("startingOffsets", "latest")
.option("kafkaConsumer.pollTimeoutMs", "5000")
.option("failOnDataLoss", "false")
.load()
Run Code Online (Sandbox Code Playgroud)
这是错误代码,
Caused by: java.util.concurrent.TimeoutException: Cannot fetch record xxxx for offset in 5000 milliseconds
Run Code Online (Sandbox Code Playgroud)
如果将5000放大到10000,仍然会发生此错误。我用谷歌搜索这个问题。似乎没有关于此问题的太多相关信息。
这是与此问题相关的sbt文件的一部分。
libraryDependencies += "org.apache.spark" %% "spark-sql-kafka-0-10" % "2.3.0" exclude ("org.apache.kafka", "kafka-clients")
libraryDependencies += "org.apache.kafka" % "kafka-clients" % "0.11.0.0"
Run Code Online (Sandbox Code Playgroud)
我也遇到这个错误。
我查看了KafkaSourceRDD的源代码,一无所获。
我猜 kafka 连接器有问题,因此我排除了“spark-sql-kafka-0-10_2.11”包中的 kafka-client,并添加了一个新的依赖项,如下所示:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_2.11</artifactId>
<version>2.3.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>kafka-clients</artifactId>
<groupId>org.apache.kafka</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在可以了。希望能帮助到你。
我创建了一个 jira 问题来报告此问题: https ://issues.apache.org/jira/browse/SPARK-23829
2018年12月17日更新:Spark 2.4和Kafka2.0解决了该问题。
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |