我有一个运行kafka 10.2.1的集群,其中使用kafka-console-producer.sh发送kafka消息,并且2/3订阅者立即收到消息,而另一个订阅者在稍后(4分钟)收到该消息。我假设这是订户的问题,所以下面是我的订阅者配置
protected ConsumerFactory<String, Object> createConsumerFactory(String kafkaBrokers) {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.GROUP_ID_CONFIG, InetAddress.getLocalHost().getHostAddress());
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 1);
return new DefaultKafkaConsumerFactory<>(props);
}
protected KafkaListenerContainerFactory<?> createKafkaListenerContainerFactory(ConsumerFactory<String, Object> consumerFactory) {
ConcurrentKafkaListenerContainerFactory<String, Object> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory);
factory.setConcurrency(1);
factory.setAutoStartup(true);
factory.setMessageConverter(new StringJsonMessageConverter());
factory.getContainerProperties().setPollTimeout(3000);
return factory;
}
订阅者在Java Spring JVM中运行,但生产者是一个简单的python脚本,它调用kafka-console-producer.sh来发送消息。生产者配置是默认的。什么可能导致消息到达这么晚?
不确定是否相关 - 当我在kafka文件夹转储日志段(kafka / myTopic-0 /)上执行ls -l
时,我看到000000 ... 000.log已经写入已故的VM我期待的时间,让我相信这个信息是按时交付的。然而,Java订阅者稍后会收到消息。可能是什么原因?