美文网首页
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