我是Kafka的新手,正在尝试在spark2中实现Kafka消费者逻辑,当我在Shell中运行所有代码并开始流式传输时,它什么也没显示。
我查看了StackOverflow中的许多帖子,但没有任何帮助。我什至从maven下载了所有依赖项jar并尝试运行,但仍然没有显示任何内容。
火花版本:2.2.0 Scala版本2.11.8 我下载的jar是kafka-clients-2.2.0.jar和spark-streaming-kafka-0-10_2.11-2.2.0.jar
但是我仍然面临着同样的问题。
请找到以下代码段
import org.apache.kafka.clients.consumer.ConsumerConfig
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.streaming.{StreamingContext, Seconds}
import org.apache.spark.streaming.kafka010.{KafkaUtils, ConsumerStrategies, LocationStrategies}
val brokers = "host1:port, host2:port"
val groupid = "default"
val topics = "kafka_sample"
val topicset = topics.split(",").toSet
val ssc = new StreamingContext(sc, Seconds(2))
val kafkaParams = Map[String, Object](
ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> brokers,
ConsumerConfig.GROUP_ID_CONFIG -> groupid,
ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer],
ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer]
)
val msg = KafkaUtils.createDirectStream[String, String](
ssc, LocationStrategies.PreferConsistent, ConsumerStrategies.Subscribe[String, String](topicset, kafkaParams)
)
msg.foreachRDD{
rdd => rdd.collect().foreach(println)
}
ssc.start()
我期望SparkStreaming能够启动,但是它什么也没做。我在这里犯了什么错误?还是这是一个已知问题?
答案 0 :(得分:1)
除非最后您致电ssc.awaitTermination()
,否则驾驶员将处于闲置状态。如果您使用的是spark-shell,则它不是流作业的好工具。
请使用Zeppelin或Spark笔记本之类的交互式工具与流进行交互,或者尝试将您的应用程序构建为jar文件,然后进行部署。
此外,如果您正在尝试火花流,则结构化流会更好,因为它很容易使用。
http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html
答案 1 :(得分:0)
ssc.start()
之后,在代码中使用ssc.awaitTermination()
。我已经在一个博客示例中的一个简单示例中编写了所有这些步骤,并在GitHub中使用了工作代码。请参阅:http://softwaredevelopercentral.blogspot.com/2018/10/spark-streaming-and-kafka-integration.html