糸クラスターでは、入力としてkafka directstream(例:バッチ時間は15秒)を使用し、入力msgを別々のuserIdsに集約したいとします。 私はupdateStateByKey
またはmapWithState
のようなステートフルなストリーミングAPIを使用しますが、APIソースからはmapWithState
のデフォルトのチェックポイントの持続時間はbatchduration * 10(私の場合は150秒)で、カフカダイレクトストリームではパーティションオフセットがチェックポイントされていますすべてのバッチ(15秒)。実際に、すべてのdstreamは異なるチェックポイントの持続時間を設定できます。 Kafka Direct InputDstreamとステートフルストリーム変換を使用しているときのチェックポイントの再認識を理解するにはどうすればよいですか?
ストリーミングアプリケーションがクラッシュしたとき、私はそれを再起動します。カフカオフセットとステートストリームrddはチェックポイントで非同期です。この場合、データを失わないようにするにはどうすればよいですか?あるいは私はチェックポイントメカニズムを誤解していますか?
私の場合は、アプリケーションのバージョンを更新する際に問題を処理しましたが、実際に知りたいことは次のとおりです。たとえば、開始時刻は0、バッチ時刻は15秒、mapWithStateチェックポイント間隔は150秒それで、ストリーミングアプリが200秒にクラッシュした場合、再コンパイルせずに再起動すると、ステートフルなストリームが150秒にリカバリされ、kafkaは195秒に時間を記録して回復します。私は165秒、180秒でカフカ入力データを失いますか?本当に、これを避けるにはどうすればいいですか?ありがとう〜 –
@HengSuチェックポイントが150秒であった場合、復旧時には150から前にやり直します。つまり、すでに処理されているデータを処理する可能性がありますが、それがチェックポイント機能の仕組みです。カフカオフセットも、チェックポイントされたデータの中に保存されます。 –
@ Yuval Itzchakovごめんなさい、私はちょっと混乱しました。カフカオフセットは、すべてのバッチ(15秒)でチェックポイントされるのは正しいですか?MapWithStateDStreamが150秒のデータを回復するとき、カフカオフセットも150秒だから私はデータを失うことはありませんでしたが、いくつかのバッチを再処理するだけですか? –