为啥使用套接字源和多个接收器的流式查询不起作用?

Posted

技术标签:

【中文标题】为啥使用套接字源和多个接收器的流式查询不起作用?【英文标题】:Why does streaming query with socket source and multiple sinks not work?为什么使用套接字源和多个接收器的流式查询不起作用? 【发布时间】:2019-01-02 20:21:02 【问题描述】:

我正在尝试使用多个查询来写入 spark 中的不同接收器。第一个查询有效,输出写入接收器,但第二个查询无效。

谁能指出我的错误。

val spark = SparkSession
  .builder
  .appName("StructuredNetworkWordCount")
  .getOrCreate()

import spark.implicits._
val source = spark.readStream
  .format("socket")
  .option("host", "localhost")
  .option("port", 9999)
  .load()
  .as[String]
  .map e =>
    println(e)
    e
  

// With Multiple Queries
val q1 = source.writeStream.outputMode("append").format("console")
  .trigger(Trigger.ProcessingTime(1000))
  .start()
println(q1)

val q2 = source.writeStream.outputMode("append")
  .format("csv")
  .option("path", "output.csv")
  .option("checkpointLocation", "/tmp/checkpoint/test")
  .trigger(Trigger.ProcessingTime(1000))
  .start()
println(q2)

spark.streams.awaitAnyTermination()

控制台接收器正在工作,但 CSV 接收器没有写入输出。如果我更改订单,则 csv sink 可以工作,但不能控制台。

【问题讨论】:

【参考方案1】:

我假设您正在使用 netcat 或类似的实用程序来生成数据。此类实用程序并非设计为可重放且不提供持久层,因此数据一旦被使用就会被不可逆转地破坏。

因此,第二个流将监听更改,但不会有任何数据到达它。

【讨论】:

可以使用 kafka 源和多个写入流进行流式传输?

以上是关于为啥使用套接字源和多个接收器的流式查询不起作用?的主要内容,如果未能解决你的问题,请参考以下文章