我有一个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()