2017-06-29 15 views
4

Kafka Streamsアプリを実行しています(0.10.2.1)。 Kafkaクラスタをシャットダウンすると、ストリームアプリケーションは次のメッセージを待機し続け、クラスタが復帰するとメッセージの消費を再開します。クラスタがダウンしている間は、が表示されます。が正常に動作しています。私はこれを45分以上テストしました。KafkaクラスターがダウンしたときにKafka Streamsアプリが失敗しない

私はカフカが例外を投げたり停止したりすると思います。私はStateListenerがKafkaStreamsがシャットダウンしたときにログに記録するように設定しましたが、決して呼び出されません。

kafkaStreams.setStateListener((newState, _) => { 
    if (newState == KafkaStreams.State.NOT_RUNNING) { 
    Log.error("Kafka died unexpectedly.") 
    } 
}) 

クラスタに接続できないときにKafkaに例外またはシャットダウンを送信させるにはどうすればよいですか?

注:これはクラスタが停止行くことを前提としていますが、カフカストリームアプリがダウンしたいと思うのはなぜ後にアプリが

+0

これは非常に例外的なケースです。生産に失敗した場合、Kafkaクラスタはかなり回復力があるはずです。 – jvwilge

+0

@jvwilge例外的なケースであるべきですが、それは前に起きたことがあります。 –

+0

'KafkaStream.setUncaughtExceptionHandler()'を介して 'UncaughtExceptionHandler'を設定しようとしましたか?おそらく、例外があり、 'System.exit()'を呼び出すべきだと思います。 –

答えて

0

を開始しましたか?

アプリはブローカの障害に耐える必要があります。つまり、ブローカが回復するまで忍耐強く続けてください。 Kafka Streamsアプリケーションのインスタンスが複数あり、そのうちの1つがブローカへの接続を失った場合、残りのインスタンスに負荷が再調整されます。接続が失われた各インスタンスがただちにシャットダウンすると、ブローカの接続性が回復してもインスタンスが失われ、冗長性と並列性が失われます。今のところカフカ・ストリームは弾力性を重視して設計されています。私はこれが正しい行動であると主張したい。

IMHOブローカ(または接続性)の障害を検出したい場合は、監視のための使用例であり、Kafka Streamsアプリケーションに障害が発生しないようにしてください。

+0

アプリケーションインスタンスを破棄して新しいインスタンスを開始することが望ましい場合があります(ほとんどのコンテナオーケストレーションプラットフォームがこれをサポートしています)。ただし、アプリケーションが正しく動作していないことを検出できる必要があります。 –

+0

質問は、 "クラスタに接続できないときにKafkaに例外またはシャットダウンを投げさせるにはどうすればよいですか?"あなたの答えはその質問に対処しておらず、コメントとしてもっと適しています。 –

+0

十分に公正:-) –

関連する問題