![](/img/trans.png)
[英]Spark 3 structured streaming use maxOffsetsPerTrigger in Kafka source with Trigger.Once
[英]PySpark Structured Streaming: trigger once not working with Kafka
我想在一小时内分批从 Kafka 集群中提取流数据,所以我每小时运行一个脚本,将 writeStream 设置为.trigger(once=True)
并将startingOffsets
设置为earliest
,如下所示:
df = spark.readStream \
.format("kafka") \
.option("kafka.bootstrap.servers",
config.get("kafka_servers")) \
.option("subscribe", config.get("topic_list")) \
.option("startingOffsets", "earliest") \
.load()
df.writeStream \
.format("parquet") \
.option("checkpointLocation", config.get("checkpoint_path")) \
.option("path", config.get("s3_path_raw")) \
.trigger(once=True)
.partitionBy('date', 'hour') \
.start()
但是每次脚本被触发时,它只会将那一刻来自 Kafka 集群的消息写入 S3,而不是像我期望的那样获取最后一小时的所有消息。
可能是什么问题?
编辑:我应该提一下,kafka 集群保留设置为 24 小时
选项1:
.trigger(once=True)
应该只处理一块数据。
请尝试将其替换为.trigger(availableNow=True)
选项 2:
以 1 小时的处理间隔启动并运行作业; .trigger(processingTime='60 minutes')
此外,您在阅读 stream 时需要设置以下选项
.option("failOnDataLoss", "false")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.