0

使用事例

Apache Storm を使用した S3 への Kafka メッセージの永続化

ここまでの話

  • 私は secor( https://github.com/pinterest/secor ) を使用してみましたが、正常に動作し、目的を果たしています。しかし、マネージャーによると、それはメンテナンスの行き過ぎかもしれません (彼らが言うように、彼は常に正しいです)。
  • Apache Kafka-Apache Storm の安定したクラスターが既に配置されているため、そのインフラストラクチャを活用することを計画しています。

議題と問題点

  • Kafka からのメッセージは Storm Bolt でバッチ処理され、ローカル ディスクのファイルに書き込まれます

  • 特定の間隔および/またはサイズ基準の後、S3 にアップロードされます

  • 障害を管理するには、ボルトがクラスタ全体にランダムに分散されるため、各ボルトが Kafka パーティションを追跡し、理想的にはタプルごとにオフセットできる必要があります。

  • パーティション/オフセットは Zookeeper に永続化できますが、そもそもボルトでタプルからそれらを取得する方法は? それらを Kafka Spout からボルトで転送する以外の方法はありますか?

4

2 に答える 2

0

Kafka スパウトはすでに Zookeeper でトピックのオフセットを追跡しているため、このロジックをボルトで実装する必要はありません。

Kafka スパウトはタプルを発行し、トポロジはそれを追跡します。タプルがボルトによって認識されると、それは通過しました。スパウトは、配信されたタプルを考慮します。エミットタプルスパウトの背後で、zookeeper の現在のオフセットが追跡されるため、何か問題が発生した場合は、最初からではなくメッセージの読み取りを開始できます。

上記のトポロジは、少なくとも 1 回の配信を保証します。トライデント トポロジを使用すると、配信を 1 回だけ保証できます。どちらの場合も、topology.max.spout.pending設定を見てください。バッチ処理を使用するため、正しく設定することが重要です。

于 2016-05-04T20:21:41.457 に答える