Kafka + Structured Streaming当主数据接收器出现故障但仍从kafka读取数据时怎么办?

时间:2018-09-10 16:44:38

标签: apache-spark apache-kafka apache-spark-sql spark-structured-streaming

我有一个Spark结构化的流应用程序,它使用如下所示的foreach方法从Kafka读取数据并将其写入数据库。但是我不知道如果我的spark应用程序无法连接到数据库以将已处理的Kafka消息写入其中,将会发生什么。当无法执行数据库插入或无法将消息无法插入数据库的Kafka偏移量存储时,是否有可能使Spark应用程序停止处理?

还是有其他解决方案?

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

val data_stream = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "server_list")
  .option("subscribe", "topic")
  .load()

val df = data_stream
    .select($"value".cast("string") as "json")

val Writer = new ForeachWriter[Row] {
  def open(partitionId: Long, version: Long): Boolean = {
    //conect to my database (Kudu in this case)
  }
  def process(record: Row) = {
    //insert records into kudu
  }
  def close(errorOrNull: Throwable): Unit = {}
}

df.get.writeStream
  .foreach(writer)
  .start()
  .awaitTermination()

0 个答案:

没有答案