[英]Track of consumed messages in Spark structured streaming
我想設置配置,讓我的應用程序跟蹤來自 kafka 的消費消息。 因此,每當它失敗時,它可以從最后一次提交或消耗的偏移量開始選擇。
readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1")
.load()
.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("topic", "topic1")
.trigger(Trigger.Continuous("1 second")) // only change in query
.start();
我在網上讀到可以設置checkpointlocation
屬性,spark 可以使用它來跟蹤偏移量。
想知道我可以在哪里設置這個屬性? 我可以在option
中設置上面的代碼嗎? 我可以知道如何正確設置它。
其次,我無法理解trigger(Trigger.Continuous("1 second"))
屬性。 文檔說continuous processing engine will record the progress of the query every second
的進度,它在從kafka讀取消息時記錄了什么樣的進度?
您可以在writeStream
中將檢查點位置設置為一個選項:
[...]
.writeStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("topic", "topic1")
.option("checkpointLocation", "/path/to/dir")
.trigger(Trigger.Continuous("1 second"))
.start();
從 Kafka 讀取時跟蹤進度意味着跟蹤 TopicPartition 中消耗的偏移量。 設置檢查點位置將使您的應用程序能夠將該信息作為 JSON object 存儲在給定路徑中,例如
{
"topic1":{
"0":11,
"1":101
}
}
這意味着應用程序已經消耗了主題topic1
的分區0
中的偏移量 10 和分區1
中的偏移量 100 。 檢查點是“提前”寫入的(使用 write-ahead-logs),因此應用程序將繼續從 Kafka 讀取消息,該消息在預期或意外(失敗)重新啟動之前中斷。
Trigger.Continuous
從 Spark 版本 2.3 開始可用。 並且現在標記為實驗性的。 與微批處理方法相比,它會在 Kafka 中的每條消息到達主題后立即獲取它,而無需嘗試將其與其他消息進行批處理。 這可以改善延遲,但很可能會降低您的整體吞吐量。
參數(例如1 seconds
)確定檢查點的頻率。
使用此觸發模式時,重要的是至少要有與主題分區一樣多的可用內核。 否則,申請將不會有任何進展。 你可以在這里閱讀更多關於它的信息:
“例如,如果您正在讀取具有 10 個分區的 Kafka 主題,那么集群必須至少有 10 個內核才能使查詢取得進展。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.