繁体   English   中英

DefaultKafkaConsumerFactory - ConcurrentHashMap - NullPointerException

[英]DefaultKafkaConsumerFactory - ConcurrentHashMap - NullPointerException

我正在使用卡夫卡消费者。 我从 Spring 引导 1.5 升级到 2.6。 现在当我运行应用程序时,它无法开始抛出 NullPointerException。 请让我知道是否有人可以在这个问题上帮助我。

Caused by: java.lang.NullPointerException
    at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) ~[?:1.8.0_25]
    at java.util.concurrent.ConcurrentHashMap.putAll(ConcurrentHashMap.java:1084) ~[?:1.8.0_25]
    at java.util.concurrent.ConcurrentHashMap.<init>(ConcurrentHashMap.java:852) ~[?:1.8.0_25]
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.<init>(DefaultKafkaConsumerFactory.java:129) ~[spring-kafka-2.8.4.jar:2.8.4]
    at org.springframework.kafka.core.DefaultKafkaConsumerFactory.<init>(DefaultKafkaConsumerFactory.java:98) ~[spring-kafka-2.8.4.jar:2.8.4]

Failed to instantiate [org.springframework.kafka.core.ConsumerFactory

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
    </parent>
<dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency> 

接收配置类:

@Slf4j
@Configuration
@EnableKafka
@ExcludeKafkaReceiver
public class XXTriggerKakfaReceiverConfig {
   
    @Autowired
    xxTriggerKafkaManagedBean kafkaListenerConfig;

    @Bean
    public Map<String, Object> xxConsumerConfigs() {
        Map<String, Object> props = new HashMap<>();
        kafkaListenerConfig.getKafkaServerConfig());
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaListenerConfig.getKafkaServerConfig());
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MessageSerializerType.getValue(kafkaListenerConfig.getValueDeserializerClass()));
        props.put(Constants.AVRO_MSG_CLASS_TYPE, kafkaListenerConfig.getAvroMessageClassType());
        // consumer groups allow a pool of processes to divide the work of
        // consuming and processing records
        props.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, kafkaListenerConfig.getPartitionAssignmentStrategy());
        props.put(ConsumerConfig.GROUP_ID_CONFIG, kafkaListenerConfig.getGroupId());
        props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, kafkaListenerConfig.getAutoOffsetReset());
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, kafkaListenerConfig.getEnableAutoCommit());
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, kafkaListenerConfig.getSessionTimeoutMS());
        props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, kafkaListenerConfig.getHeartbeatIntervalMS());
        props.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, kafkaListenerConfig.getRequestTimeoutMS());
        props.put(ConsumerConfig.FETCH_MAX_WAIT_MS_CONFIG, kafkaListenerConfig.getFetchMaxWaitMS());
        props.put(ConsumerConfig.RECONNECT_BACKOFF_MS_CONFIG, kafkaListenerConfig.getReconnectBackoffMS());
        props.put(ConsumerConfig.RETRY_BACKOFF_MS_CONFIG, kafkaListenerConfig.getRetryBackoffMS());
        props.put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG, kafkaListenerConfig.getMaxPartitionFetchSize());
        props.put(ConsumerConfig.FETCH_MIN_BYTES_CONFIG, kafkaListenerConfig.getFetchMinBytes());
        props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, kafkaListenerConfig.getMaxPollRecords());

        return props;
    }

    @Bean
    public ConsumerFactory<String, Object> xxConsumerFactory() {
        return new DefaultKafkaConsumerFactory<>(xxConsumerConfigs());  //This is the place throwing Null pointer Exception
    }

    /**
     * A concurrent Kafka listener with concurrency managed through {concurrent_kafka_listeners} property value.
     *
     * @return ConcurrentKafkaListenerContainerFactory instance 
     */
    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Object> xxKafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(xxConsumerFactory());
        factory.setConcurrency(kafkaListenerConfig.getNumberOfConcurrentListeners());
        factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE);
        ErrorHandler errorHandler = new KafkaListenerErrorHandler();
        errorHandler.setAckAfterHandle(false);        
        factory.setCommonErrorHandler((CommonErrorHandler) errorHandler);
        return factory;
    }

    /**
     * A concurrent Kafka batch listener with concurrency managed through {concurrent_kafka_listeners} property value.
     *
     * @return ConcurrentKafkaListenerContainerFactory instance
     */
    @Bean
    public ConcurrentKafkaListenerContainerFactory<String, Object> xxKafkaBatchListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(xxConsumerFactory());
        factory.setConcurrency(kafkaListenerConfig.getNumberOfConcurrentListeners());
        factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE);
        ErrorHandler errorHandler = new KafkaListenerErrorHandler(); 
        errorHandler.setAckAfterHandle(false);        
        factory.setCommonErrorHandler((CommonErrorHandler) errorHandler);
        factory.setBatchListener(true);
        return factory;
    }

我遇到了同样的错误,在 Springboot 升级(v2.2.4 -> v2.7.3)之前,代码工作正常,升级后,它开始抛出NullPointerException 我强烈建议在 Spring 库中调试代码和 go 以了解哪个确切的属性失败了。 在我的情况下,它是

    SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG=
or
    ssl.endpoint.identification.algorithm=

在升级之前,它作为null一直运行良好。 但升级后,由于 Kafka 库的变化,不得不将其设置为空字符串。

从这个答案中找到帮助: https://stackoverflow.com/a/56648768/4898612

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM