2016-07-28 35 views
3

我環顧四周,但沒有找到令人滿意的答案。也許我錯過了一些東西。請幫忙。如何在Spark Kafka直接流式傳輸中手動提交偏移量?

我們有一個消耗Kafka主題的Spark流應用程序,它需要在推進Kafka偏移之前確保端到端處理,例如,更新數據庫。這非常類似於在流式傳輸系統中構建事務支持,並且保證每個消息都被處理(轉換),更重要的是輸出。

我已閱讀關於Kafka DirectStreams。它表示,爲了在DirectStreaming模式下進行強健的故障恢復,應啓用Spark檢查點,其中stores the offsets along with the checkpoints。但偏移管理是在內部完成的(設置Kafka配置參數,如["auto.offset.reset", "auto.commit.enable", "auto.offset.interval.ms"])。它沒有說明我們可以如何(或如果)自定義提交偏移量(例如,我們已經加載數據庫,例如)。換句話說,我們可以將"auto.commit.enable"設置爲false,並自己管理偏移量(與數據庫連接不同)嗎?

任何指導/幫助非常感謝。

+0

https://spark.apache.org/docs/2.2.0/streaming-kafka-0-10-integration.html#kafka-itself – void

回答

1

下面的文章可能是理解該方法的好開始。

spark-kafka-achieving-zero-data-loss

更進一步,

文章建議使用動物園管理員客戶端可以直接,其可通過類似KafkaSimpleConsumer來代替也。使用zookeper/KafkaSimpleConsumer的優點是依賴zookeper保存的偏移量的監視工具可以充分利用。此外,信息也可以保存在HDFC或其他可靠的服務上。

+0

這絕對是一個很好的閱讀@Rakesh,謝謝!本文提出了一種替代方法,即不會控制偏移量(通過將自動提交設置爲false)。然而,當我閱讀本文時,我意識到最終一致系統中的一個重要概念,即一旦您通過門傳遞了信息,服務就會確保其交付。我想這是我在這種情況下唯一可以遵循的機制。 – TroubleShooter

相關問題