monolithic kernel

Kafka Streams で StreamThread が死んだことを検知する

December 14, 2019

何らかの予期せぬ原因で StreamThread が死んだとき、StreamThread が死ぬので処理は止まってしまうものの、プロセスはそのまま生きている、みたいなことになるのを避けたい。素の状態で使っていても標準エラー出力には例外の内容が出るので、それを見て対応する運用なら問題ないのだが、自前で構築しているログ周りの仕組みに寄せたい場合には、自分で例外を捕捉して好きなようにするのがよい。

KafkaStreams#setUncaughtExceptionHandler を使うことで、StreamThread に対して UncaughtExceptionHandler を登録できる。

final KafkaStreams streams = new KafkaStreams(...);
streams.setUncaughtExceptionHandler((t, e) -> {
    ...
});
streams.start();

仕事のプロジェクトだと、ここでログを出しておいて、それが中央のサーバに集約されて最終的に Slack でアラートが飛んでくる、みたいな形になっている。便利。