我是Spark / Structured Stream的新手。该应用程序是一个批处理作业,将每天启动一次,并应该读取该时间点上Kafka主题上可用的所有消息,对消息进行处理并写入文本文件。
我有以下代码从Topic读取并将内容转储到文本文件。
Dataset dataset = sparkSession.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "TestTopic")
.option("startingOffsets", "earliest")
.load();
dataset = dataset.select(from_json(col("value").cast(DataTypes.StringType),schema).as("record")).selectExpr("record" + ".*");
StreamingQuery streamingQuery = dataset.writeStream()
.format("csv")
.option("sep", "#")
.option("header", "true")
.option("checkpointLocation", "path/to/checkpoint/dir")
.start("/output");
streamingQuery.processAllAvailable();
应用程序已经将所有处理/丰富/业务验证/逻辑作为Spring组件,并且那些组件需要List< Bean>。
问题:
我可以在转换中使用Spring组件吗?怎么样?
有没有办法一次访问所有记录,以便我可以创建一个List并将其传递给Spring组件。 map / ForeachWriter一次可以访问一条记录。
某些Spring组件访问休息服务,如果这些服务关闭,我想终止结构化流,而不是将偏移提交给Kafka,这样当服务可用时,流媒体作业可以再次启动