簡體   English   中英

跟蹤 Spark 結構化流中的消費消息

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM