2016-09-28 48 views
1

我正在嘗試整合Spark/Kafka來構建流媒體應用程序。 Kakfa版本:0.9 spark:1.6.2SparkStreaming/Kafka膠印處理

如何處理RDD批處理數據後的偏移量。

你能否給我更多關於處理偏移量的見解?

火花內置了自動存儲和讀取偏移嗎?還是我需要引導火花來讀取某些商店(如mongo或oracle)的偏移量?

JavaInputDStream<String> directKafkaStream = KafkaUtils.createDirectStream(jsc, String.class, String.class, 
       StringDecoder.class, StringDecoder.class, String.class, kafkaParams, topicMap, 
       (Function<MessageAndMetadata<String, String>, String>) MessageAndMetadata::message); 

     directKafkaStream.foreachRDD(rdd -> { 

回答

2

的回答你的問題取決於你想要的消息傳遞語義:

  • 最多一次:每個消息都會被處理最多一次
  • 至少一次:每個消息最多隻能處理一次
  • 恰好一次:最多一次,至少一次在同一時間e

首先,我會推薦閱讀those slides以及this blog post

我假設你正在追求,一次,因爲其餘的很容易弄清楚。總之,一對夫婦的方法來考慮:

檢查點

星火流可以讓你檢查點的DStreams。如果您使用來自KafkaUtils的直接流,偏移量也將被檢查點。流式作業可能會在檢查點之間的任何地方失敗,因此有些消息可能會重播。要用這種方法實現恰好一次語義,就必須使用冪等輸出操作(換句話說 - 下游系統能夠區分/忽略重放消息)。

優點:易於實現;來自開箱即用

缺點至少一次語義;代碼更改後檢查點變爲無效;偏移量存儲在星火,而不是在動物園管理員

事務性數據存儲

你可能想自己存儲的偏移量,支持事務的自定義數據存儲,即如MySQL的關係數據庫。在這種情況下,您需要確保處理流和保存偏移量包含在單個事務中。

優點恰好一次語義

缺點:難以建立,需要一個事務性數據存儲

基於WAL-接收機

您可以使用舊的卡夫卡連接器基於WAL。

優點:與其他數據源一起工作;在Zookeeper中存儲偏移量 缺點:它依賴於HDFS;你不能直接訪問偏移量;它使得並行性難以實現。總之,這一切都取決於你的要求 - 也許你可以取消一些限制來簡化這個問題。

-2

當您想使用Spark Streaming使用來自Kafka主題的數據時,有兩種方法可以做到這一點。

1.Receiver基礎的方法 在這種方法中,偏移在動物園管理員管理,它在動物園管理員自動更新偏移。瞭解更多信息。 http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-1-receiver-based-approach

2.直接法(不接收) 這種方法的缺點是它不能在動物園管理員更新偏移,因此基於動物園管理員,卡夫卡的監視工具不會顯示進度。但是,您可以在每個批次中訪問由此方法處理的偏移量,並自己更新Zookeeper。

http://spark.apache.org/docs/latest/streaming-kafka-integration.html#approach-2-direct-approach-no-receivers

+0

這個答案是非常廣泛的,更超過它只是火花文檔的副本! – avr