2016-07-28 8 views
3

私は頑張りましたが、満足のいく答えは見つかりませんでした。たぶん私は何かが欠けているでしょう。助けてください。Spark Kafkaの直接ストリーミングでオフセットを手動でコミットする方法はありますか?

Sparkストリーミングアプリケーションではカフカのトピックを使用していますが、カフカのオフセットを先に進める前にエンドツーエンドの処理を行う必要があります。データベースを更新する。これは、ストリーミングシステム内のトランザクションサポートを構築し、各メッセージが処理(変換)され、さらに重要なことを保証するようなものです。

私はKafka DirectStreamについて読んでいます。 DirectStreamingモードでの堅牢な障害回復のために、スパークチェックポイントを有効にする必要があります(stores the offsets along with the checkpoints)。しかし、オフセット管理は内部的に行われます(["auto.offset.reset", "auto.commit.enable", "auto.offset.interval.ms"]のようなKafka設定パラメータを設定します)。コミットのオフセットをどのようにカスタマイズできるかについては言及していません(たとえば、データベースをロードした後など)。言い換えれば、"auto.commit.enable"をfalseに設定し、オフセットを管理できますか(DB接続と同じではありません)。

ご指導お願いします。

+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のようなものに置き換えることができ、直接のZooKeeperクライアントを、使用することを提案しています。 zookeper/KafkaSimpleConsumerを使用する利点は、zookeperに保存されたオフセットに依存する監視ツールを活用できることです。また、情報はHDFCまたはその他の信頼性の高いサービスに保存することもできます。

+0

これは間違いなく良い読書です@レイク、ありがとう!この記事では、(自動コミットをfalseに設定することによって)オフセットを制御しない別のアプローチを提案しています。しかし、私がこの記事を読んだとき、最終的に一貫したシステムで重要な概念を実現しました。あなたの扉を通ってメッセージが届くと、そのサービスはその配信を保証します。私はそれが私の場合にも続くことができる唯一のメカニズムだと思います。 – TroubleShooter

関連する問題