Kafka使用者不加入自定义groupId

时间:2017-09-04 13:41:30

标签: java spring apache-kafka spring-kafka

我根据Spring Kafka文档设置了Kafka ConsumerFactory。 但是,似乎没有使用groupId。也许我也只是弄错了所以我想让你知道我的经历。

这是我的配置似乎不起作用:

@Bean
ConsumerFactory<String, KafkaEvent> kafkaEventConsumerFactory() {
    return new DefaultKafkaConsumerFactory<>(
            getConsumerProperties(),
            new StringDeserializer(),
            new JsonDeserializer<>(KafkaEvent.class));
}

Map<String, Object> getConsumerProperties() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); // TODO
    props.put(ConsumerConfig.GROUP_ID_CONFIG, "myGroupId");
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);


    props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 3);
    props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 120000);

    props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 45000);
    props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 70000);

    return props;
}

我有@KafkaEventListener这样的配置,没有再次明确指定groupId:

@KafkaListener(topics = KafkaEventPublisher.ORDER_TOPIC)
public class KafkaEventListener {

   @Autowired
   private ConsumerFactory<String, KafkaEvent> consumerFactory;

   @KafkaHandler
   public void listenTo(@Payload KafkaEvent event) {
       LOGGER.error(LogMarker.KAFKA, consumerFactory.getConfigurationProperties().toString());
   }

}

我还可以看到我的groupId“myGroupId”包含在上面记录的错误日志中。然而,令我怀疑的是一些ConsumerCoordinator的DEBUG日志记录,它始终声明要加入另一个groupId,我有点担心这看起来是正确的。

2017-09-04 15:28:13.904 (    ) INFO consumer.internals.AbstractCoordinator             - Successfully joined group org.springframework.kafka.KafkaListenerEndpointContainer#0 with generation 40
2017-09-04 15:28:13.904 (    ) INFO consumer.internals.AbstractCoordinator             - Successfully joined group org.springframework.kafka.KafkaListenerEndpointContainer#0 with generation 40
2017-09-04 15:28:13.906 (    ) INFO consumer.internals.ConsumerCoordinator             - Setting newly assigned partitions [] for group org.springframework.kafka.KafkaListenerEndpointContainer#0
2017-09-04 15:28:13.907 (    ) INFO consumer.internals.ConsumerCoordinator             - Setting newly assigned partitions [my-topic-0] for group org.springframework.kafka.KafkaListenerEndpointContainer#0

同样在Spring Startup上输出ConsumerConfig。我可以看到groupId是错误的,但其他属性都被正确接管。

据我所知,我可以通过在ConsumerFactory上设置groupId或使用spring.kafka.consumer.group-id在application.properties中设置它来全局设置groupId。两种变体都不起作用。

只有当我使用@KafkaListener注释配置groupId时,LOG才会声明消费者加入了正确的组:

2017-09-04 15:38:30.787 (    ) DEBUG consumer.internals.AbstractCoordinator             - Received successful JoinGroup response for group myGroupId: org.apache.kafka.common.requests.JoinGroupResponse@4c51c449

使用此配置:

@KafkaListener(topics = KafkaEventPublisher.ORDER_TOPIC, groupId = "myGroupId")

我们正在使用Spring Boot 2.0.0.M3(因此,Spring Kafka 2.0.0.M3)

1 个答案:

答案 0 :(得分:1)

这是M3中的一个错误; fixed on master(2.0.3.BUILD-SNAPSHOT)(以及1.3.0.M2)。我们期待本周晚些时候发布2.0.0.RC1发布候选版本(等待Spring Framework RC4)。