私は私のプロジェクトでカフカのクラスタを実装するためのPOCに取り組んでいます。私は3つのブローカーと私のローカルマシンでセットアップカフカクラスタを持っています。今、私は内部的に生成するために春カフカを使用しているSpring MVCのRESTサービスを使用してカフカサーバーにメッセージを送信し、カフカのクラスタへとからのメッセージを消費しています。今私は、消費者がブローカーがダウンしたときに、トピックからメッセージを受信できない場合にアラートを送信しようとしています。私シャットダウン消費者が接続されている唯一のブローカー。私は私のログに例外を取得していないですが、私は次の警告メッセージを得ました。
0:20:35.500 [TEST_GROUP-0-C-1] o.apache.kafka.clients.NetworkClientに警告 - ノード2147483645に【消費者のclientId =消費者1のgroupId = TEST_GROUP]接続が確立できませんでした。ブローカーが使用できない場合があります。
それは私の消費者が接続を失ったとき、私は警告を送信できるように、この警告メッセージをキャッチすることは可能ですか?以下は私の消費者のコードがあります。
private static final Logger LOGGER = LoggerFactory.getLogger(ListenerServiceImpl.class);
@Autowired
Dao<RnMessage> messageDao;
@Autowired
MessageService messageService;
@KafkaListener(id = "TEST_GROUP", topics = "TESTQUEUE", errorHandler="eventQueueMessageListenerExceptionHandler")
public void listenMessageInQueue(String msg) {
try {
//String str = new String(msg, "UTF-8");
LOGGER.info("receiving payload='{}'", msg);
messageDao.saveMessage(msg);
messageService.sendMessageToOutQueue(msg);
}catch(Exception e) {
e.printStackTrace();
}
}
それはブローカーをポーリングすることができないときの消費者はNonResponsiveConsumerEventをスローします。@EventListenerでこのイベントをキャッチすることが可能です。
ここではサンプルコードは次のとおりです。
@EventListener()
public void eventHandler(NonResponsiveConsumerEvent event) {
//When Kafka server is down, NonResponsiveConsumerEvent error is caught here.
System.out.println("CAUGHT the event "+ event);
}
あなたは、ドキュメントで詳細を見ることができます。https://docs.spring.io/spring-kafka/reference/htmlsingle/#idle-containers
私は、特にドキュメントでこれに言及しています。
ブローカーは(執筆時点で)到達不能であれば、消費者のポーリング()メソッドは、メッセージが受信されないので、ないの出口を行い、アイドルイベントが発生することができません。この問題を解決するために、コンテナはNonResponsiveConsumerEventを公開します
作業JUnitテストコードはここにある- https://github.com/shankarps/KafkaDemo/blob/master/src/test/java/com/kafkademo/stack/TestConsumerWithNonAvailableBroker.java