Spark Streamingアプリケーションは、受信機のKafkaキューからデータを読み取り、変換を行ってHDFSに出力します。バッチ間隔は1分ですが、すでにバックプレッシャーとspark.streaming.receiver.maxRate
のパラメータが調整されているため、ほとんどの場合は正常に動作します。Spark Streaming Kafka backpressure
しかし、まだ1つの問題があります。 HDFSが完全に停止すると、バッチジョブは長時間停止します(HDFSは4時間稼動していないとし、ジョブは4時間停止します)が、受信者はジョブが終了していないことを認識しません、それではまだ4時間分のデータを受信しています。これによりOOM例外が発生し、アプリケーション全体がダウンしてしまい、多くのデータが失われました。
私の質問は次のとおりです。レシーバにジョブが完了していないことを知らせて、データを受信しないようにしてもいいし、ジョブが終了したら追いつくためのデータを受信し始めます。 。上記の状態で、HDFSがダウンすると、受信機はカフカからのデータを少なく読み込み、次の4時間で生成されるブロックは実際には小さく、受信機とアプリケーション全体はダウンしていない、HDFSがOKの後、より多くのデータと追いつく。
リンクは、素晴らしい&詳細な分析.. – raksja