Kafka Streams で StreamThread が死んだことを検知する
何らかの予期せぬ原因で StreamThread が死んだとき、StreamThread が死ぬので処理は止まってしまうものの、プロセスはそのまま生きている、みたいなことになるのを避けたい。素の状態で使っていても標準エラー出力には例外の内容が出るので、それを見て対応する運用なら問題ないのだが、自前で構築しているログ周りの仕組みに寄せたい場合には、自分で例外を捕捉して好きなようにするのがよい。
KafkaStreams#setUncaughtExceptionHandler を使うことで、StreamThread に対して UncaughtExceptionHandler を登録できる。
final KafkaStreams streams = new KafkaStreams(...);streams.setUncaughtExceptionHandler((t, e) -> { ...});streams.start();仕事のプロジェクトだと、ここでログを出しておいて、それが中央のサーバに集約されて最終的に Slack でアラートが飛んでくる、みたいな形になっている。便利。