[英]Spark Structured Streaming - kafka offset handling
當我從最新的偏移量啟動我的 Spark Structured Streaming 3.0.1 應用程序時,它運行良好。 但是當我想從一些較早的偏移量開始時——例如:
我可以在日志中看到起始偏移量被正確拾取,但是隨后發生了一系列搜索(從我定義的位置開始),直到它達到當前的最新偏移量。
我刪除了我的檢查點目錄並嘗試了幾個選項,但情況總是相同的 - 它報告正確的起始偏移量,但是需要很長時間才能慢慢尋找最新的並開始處理 - 知道為什么以及我應該另外查看?
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 獲取的偏移量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.