У меня есть задание Spark Structured Streaming, оно считывает смещения из темы Kafka и записывает ее в базу данных aerospike.В настоящее время я готовлю эту работу к производству и внедряю SparkListener
.Просматривая документацию, я наткнулся на этот пример:
StreamingQuery query = wordCounts.writeStream()
.outputMode("complete")
.format("console")
.start();
query.awaitTermination();
После выполнения этого кода потоковые вычисления начнутся в фоновом режиме.Объект запроса является дескриптором этого активного потокового запроса, и мы решили дождаться завершения запроса с помощью awaitTermination (), чтобы предотвратить завершение процесса, пока запрос активен.
Iпонять, что он ожидает завершения запроса, прежде чем завершить процесс.Что это значит точно?Это помогает избежать потери данных, записанных запросом.
Чем полезно, когда запрос записывает миллионы записей каждый день?
Хотя мой код выглядит довольно просто:
dataset
.writeStream()
.option("startingOffsets", "earliest")
.outputMode(OutputMode.Append())
.format("console")
.foreach(sink)
.trigger(Trigger.ProcessingTime(triggerInterval))
.option("checkpointLocation", checkpointLocation)
.start();