4

これは、 Kafka-node を使用した Kafka ストリームのエラー - 負のタイムスタンプ の複製である可能性がありますが、そうではありません。私の Kafka Streams アプリは、各メッセージに対していくつかの変換ロジックを実行し、それを新しいトピックに転送します。アプリには時間ベースの集計/処理がないため、カスタム タイムスタンプ エクストラクタを使用する必要はありません。このアプリは数日間正常に動作していましたが、突然アプリが負のタイムスタンプ例外をスローしました。

Exception in thread "StreamThread-4" org.apache.kafka.streams.errors.StreamsException: Extracted timestamp value is negative, which is not allowed.

すべての StreamThreads (合計 10 個) からこの例外をスローした後、数時間ストリームでそれ以上の進行がなかったため、アプリは一種のフリーズしました。その後、例外はスローされませんでした。アプリを再起動すると、新着メッセージのみの処理が開始されました。

問題は、間に入ったメッセージに何が起こったのかです (例外をスローした後、アプリを再起動する前に)。欠落しているメッセージにタイムスタンプが埋め込まれていなかった場合 (ブローカーとプロデューサーで変更が発生していないため、非常に不可能です)、そのようなメッセージごとにアプリが例外をスローする必要があったのではないでしょうか? または、最初にメッセージで負のタイムスタンプを検出したときに、アプリがストリームの進行を停止するようなものではありませんか? 負のタイムスタンプが検出された後でもアプリがストリームを進行できるように、この状況を処理する方法はありますか?私のアプリは Kafka Streams ライブラリ バージョン 0.10.0.1-cp1 を使用しています。

注: 各メッセージの負のタイムスタンプをチェックできるカスタム タイムスタンプ エクストラクタを簡単に作成できますが、それは私のアプリにとって不要なオーバーヘッドです。私が理解したいのは、負のタイムスタンプを持つメッセージを検出した後、ストリームが進行しなかった理由だけです。

4

1 に答える 1