群集

时间:2018-02-13 19:32:05

标签: java apache-kafka kafka-consumer-api kafka-producer-api spring-kafka

我有一个运行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订阅者稍后会收到消息。可能是什么原因?

0 个答案:

没有答案