これはError in Kafka Streams using kafka-node - negative timestampの複製である可能性がありますが、確かにそうではありません。私のKafka Streamsアプリケーションは、各メッセージに対していくつかの変換ロジックを行い、それを新しいトピックに転送します。時間ベースの集計/処理はアプリにはないので、カスタムのタイムスタンプ抽出機能を使用する必要はありません。このアプリは数日間正常に動作していましたが、突然アプリが負のタイムスタンプ例外をスローしました。数時間の流れにさらなる進展がなかったとしてStreamsException:抽出されたタイムスタンプ値が負であり、許可されていません
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を使用しています。
注:私は簡単に各メッセージの否定的なタイムスタンプをチェックできるカスタムタイムスタンプ抽出プログラムを置くことができますが、それは私のアプリケーションにとって不必要なオーバヘッドです。私が理解したいのは、負のタイムスタンプを持つメッセージを検出した後にストリームが進まなかった理由です。
@ matthias-j-sax、このような詳細な返信をありがとうございます。一時的な回避策として、カスタムタイムスタンプ抽出プログラムを実装しています。 – Samy