Java “如何捕捉警告”;经纪人可能不在”;在春天卡夫卡的听众

Java “如何捕捉警告”;经纪人可能不在”;在春天卡夫卡的听众,java,spring,apache-kafka,spring-kafka,Java,Spring,Apache Kafka,Spring Kafka,我正在为在我的项目中实现kafka集群而开发POC。我已经在本地机器上用3个代理安装了一个kafka群集。现在,我正在使用Spring MVC REST服务向Kafka服务器发送消息,该服务在内部使用Spring Kafka来生成和使用往返于Kafka集群的消息。现在,我尝试在代理关闭时,当消费者无法接收来自主题的消息时发送警报。我关闭了消费者连接的唯一代理。我的日志中没有任何异常,但我收到了以下警告消息 0:20:35.500[测试组-0-C-1]警告 o、 apache.kafka.clie

我正在为在我的项目中实现kafka集群而开发POC。我已经在本地机器上用3个代理安装了一个kafka群集。现在,我正在使用Spring MVC REST服务向Kafka服务器发送消息,该服务在内部使用Spring Kafka来生成和使用往返于Kafka集群的消息。现在,我尝试在代理关闭时,当消费者无法接收来自主题的消息时发送警报。我关闭了消费者连接的唯一代理。我的日志中没有任何异常,但我收到了以下警告消息

0:20:35.500[测试组-0-C-1]警告 o、 apache.kafka.clients.NetworkClient-[Consumer clientId=Consumer-1, 无法连接到节点2147483645的groupId=TEST\u 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();
        }       
    }
private static final Logger Logger=LoggerFactory.getLogger(ListenerServiceImpl.class);
@自动连线
道消息道;
@自动连线
消息服务消息服务;
@KafkaListener(id=“TEST_GROUP”,topics=“TESTQUEUE”,errorHandler=“eventQueueMessageListenerExceptionHandler”)
public void listenMessageInQueue(字符串消息){
试一试{
//String str=新字符串(消息,“UTF-8”);
info(“接收有效负载='{}',msg);
messageDao.saveMessage(msg);
messageService.sendMessageToOutQueue(msg);
}捕获(例外e){
e、 printStackTrace();
}       
}

消费者无法轮询经纪人时,会抛出一个无响应的消费者事件。可以使用@EventListener捕获此事件

下面是一个示例代码:

@EventListener()
public void eventHandler(NonResponsiveConsumerEvent event) {
    //When Kafka server is down, NonResponsiveConsumerEvent error is caught here.
    System.out.println("CAUGHT the event "+ event);
}
您可以在文档中看到更多详细信息

我在文件中特别提到这一点

如果无法联系到代理(在撰写本文时),消费者 poll()方法不退出,因此未收到任何消息,因此处于空闲状态 无法生成事件。要解决此问题,容器将 发布无响应的消费事件


这里有一个工作的JUnit测试代码-

显示使用者配置,并检查zookeeper和kafka服务器是否使用了不同的设置,您可以将日志发送到Splunk或Elasticsearch之类的工具,这些工具配置了针对特定日志条件的警报。那么,你就不会在你所有的卡夫卡客户中添加修改样板文件的代码了。这帮我解决了我的问题。我能够捕获此事件并使用它发送警报。谢谢