2016-09-28 4 views
1

私は、ストリーミングアプリを構築するためにSpark/Kafkaを統合しようとしています。 Kakfaバージョン:0.9 spark:1.6.2SparkStreaming/Kafkaオフセット処理

RDDバッチでデータを処理した後にどのようにオフセットを処理しますか?

オフセットの処理に関する詳細を教えていただけますか?

sparkは自動的にオフセットを保存して読み込む機能を備えていますか?または私はmongo oracleのようないくつかの店からのオフセットを読むためにsparkを導く必要がありますか?

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

あなたの質問への答えは、ご希望のメッセージ配信のセマンティクスに依存します。

  • 高々度:各:各メッセージは少なくとも一度高々一度
  • 処理されますメッセージは最大で1回処理されます
  • 正確に1回:同じ時間に少なくとも1回e

まず、those slidesthis blog postとお読みください。

私はあなたがを正確に一度と追求していると仮定しています。残りのものはわかりやすいからです。とにかく、アプローチのカップルが考慮すべき:

チェックポイント

スパークストリーミングはあなたDStreamsをチェックポイントすることができます。 KafkaUtilsのダイレクトストリームを使用すると、オフセットもチェックポイントされます。ストリーミングジョブはチェックポイント間でどこでも失敗する可能性があるため、一部のメッセージが再生される可能性があります。 を正確に一度のセマンティクスにするには、冪等の出力操作を使用する必要があります(つまり、ダウンストリームシステムは再生されたメッセージを区別/無視できます)。

プロ:達成しやすい;すぐに出てくる

短所少なくとも1回セマンティクス;コードチェンジ後にチェックポイントが無効になります。オフセットはない飼育係

トランザクションデータの保存あなたはすなわちMySQLのようなリレーショナルデータベーストランザクションをサポートするカスタムデータストアにオフセットを自分で保存したい場合があります

で、スパークに格納されています。この場合、処理ストリームと保存オフセットが単一のトランザクションに含まれていることを確認する必要があります。

賛否正確に一度セマンティクス

短所:セットアップが難しく、

トランザクションデータストアを必要とWALベースのレシーバ

あなたは古いカフカのコネクタを使用することができますWALベース。

プロ:他のデータソースでも機能します。 Zookeeperにオフセットを格納します 短所:HDFSに依存します。オフセットに直接アクセスすることはできません。並列化を実現するのをより困難にします。

要約すると、すべてが要件に依存します。この問題を単純化するためにいくつかの制限を緩和することができます。

-2

Spark Streamingを使用してカフカのトピックからデータを消費する場合は、2つの方法があります。このアプローチでは

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

関連する問題