美文网首页
spring kafka: multiple points问题

spring kafka: multiple points问题

作者: 轰鸣龙 | 来源:发表于2020-12-15 15:53 被阅读0次

    项目中需要消费kafka,之前是用官方的java api来写的,最近尝试使用spring kafka来消费

    protected SimpleDateFormat sdf = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss",Locale.ENGLISH);
    @KafkaListener(id = "springGroup",clientIdPrefix = "spring",topics = {"xxxx"},containerFactory = "batchContainerFactory",errorHandler = "myErrorHandler")
        public void batchListener(ConsumerRecords<String, JsonObject> records, Acknowledgment acknowledgment) {
            for(ConsumerRecord<String, JsonObject> record : records){
                // 日志中一般会有时间戳
                String log = record.value().get("message_time").getAsString();
                try{
    
                      String requestTime = sdf.format(log);
                }catch (Exception e) {
                    logger.error("log parse exception {}",record.value());
                    logger.error("{}", e.getMessage(),e);
                }
    
    }
    

    上线后,有大量的异常日志,如:
    java.lang.NumberFormatException: For input string: "115.E115E22"
    java.lang.NumberFormatException: For input string: ""
    一开始以为是时间格式不一致导致解析异常,打印原始日志记录record.value并未发现异常
    最终在错误日志里面还发现了java.lang.NumberFormatException: multiple points
    跟着这个很容易查到原因是:在多线程环境下使用了线程不安全SimpleDateFormat
    虽然这里并未显示地创建多个线程,但是batchListener本质上会被多个线程调用,进而导致了该问题

    相关文章

      网友评论

          本文标题:spring kafka: multiple points问题

          本文链接:https://www.haomeiwen.com/subject/jbewgktx.html