Spark - 不会停止消耗Kafka主题的Spark Stream

时间:2018-04-11 17:19:59

标签: scala apache-spark spark-streaming embedded-kafka

我正在尝试为使用kafka的数据的火花流示例编写测试。我正在使用EmbeddedKafka

  implicit val config = EmbeddedKafkaConfig(kafkaPort = 12345)

  EmbeddedKafka.start()
  EmbeddedKafka.createCustomTopic(topic)

  println(s"Kafka Running ${EmbeddedKafka.isRunning}")

  val spark = SparkSession.builder.appName("StructuredStreaming").master("local[2]").getOrCreate
  import spark.implicits._

  val df = spark.readStream.format("kafka")
    .option("kafka.bootstrap.servers", "localhost:12345")
    .option("subscribe", topic)
    .load()

  // pushing data to kafka
  vfes.foreach(e => {
    val json = ...
    EmbeddedKafka.publishStringMessageToKafka(topic, json)
  })

  val query = df.selectExpr("CAST(value AS STRING)")
    .as[String]
    .writeStream.format("console")

  query.start().awaitTermination()
  spark.stop()
  EmbeddedKafka.stop()

当我运行它时,它会一直运行,并且不会停止或打印到控制台。 我无法弄清楚为什么会这样。 我还尝试在调用流上的EmbeddedKafka.stop()之前调用stop来终止kafka。

1 个答案:

答案 0 :(得分:0)

尝试通过以下方式设置超时时间

 query.start().awaitTermination( 3000)

其中3000以毫秒为单位