[英]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.