簡體   English   中英

Spark Structured Streaming - kafka 偏移處理

[英]Spark Structured Streaming - kafka offset handling

當我從最新的偏移量啟動我的 Spark Structured Streaming 3.0.1 應用程序時,它運行良好。 但是當我想從一些較早的偏移量開始時——例如:

  • 起始偏移量為“最早”
  • 起始偏移量到特定偏移量,例如 {"MyTopic-v1":{"0":1686734237}}

我可以在日志中看到起始偏移量被正確拾取,但是隨后發生了一系列搜索(從我定義的位置開始),直到它達到當前的最新偏移量。

我刪除了我的檢查點目錄並嘗試了幾個選項,但情況總是相同的 - 它報告正確的起始偏移量,但是需要很長時間才能慢慢尋找最新的並開始處理 - 知道為什么以及我應該另外查看?

2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786734237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786734737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786735237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786735737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786736237 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786736737 for partition MyTopic-v1-0
2021-02-19 14:52:23 INFO  KafkaConsumer:1564 - [...] Seeking to offset 1786737237 for partition MyTopic-v1-0

我讓應用程序運行了更長的時間,它最終開始生成文件,但我的 100 秒處理觸發器沒有得到滿足,數據顯示得更晚 - 20-30 分鍾后。

(我也在 spark 2.4.5 上測試過——同樣的問題——也許是一些 kafka 配置?)

如您所示,使用帶有 JSON object 的選項startingOffsets應該可以正常工作。

您觀察到的是,在應用程序第一次啟動時,結構化流作業將讀取所有(.)從提供的(1686734237)偏移量,直到主題中最后一個可用的偏移量。 由於這可能是相當多的消息,因此處理該大塊將使第一個微批處理非常繁忙。

請記住, Trigger選項只定義了微批次的觸發頻率。 您應該確保將此觸發率與預期的處理時間保持一致。 我在這里基本上看到兩個選項:

  • 使用選項maxOffsetsPerTriger來限制每個觸發器/微批次從 Kafka 獲取的偏移量
  • 避免使用任何觸發器,因為這將允許您的 stream 默認情況下在前一個觸發器完成數據處理后立即觸發

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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