Spring Kafka 2.2.2消费者只返回一个记录,而不是最大轮询记录

时间:2019-06-23 14:32:35

标签: spring-kafka consumer

我们正在使用Spring Kafka 2.2.2 Release通过@KafkaListener以及ConcurrentKafkaListenerContainerFactory从Kafka检索记录。我们已将max-poll-records配置为5,但是它始终只将1条记录提供给使用者,而不是5条记录。

虽然具有相同的配置,但它在Spring Kafka 2.1.4.Release中有效。

这是我们的application.yml配置:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      enable-auto-commit: false
      max-poll-records: 5
      bootstrap-servers: localhost:9092
      group-id: group_id
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: com.gap.cascade.li.data.xx.xx.CustomDeserialiser

这是我们的ConcurrentKafkaListenerContainerFactory:

  @Bean
  public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());
    factory.setBatchListener(true);

    return factory;
  }

我们是否缺少Spring Kafka 2.2.2发行版需要做的任何配置?

1 个答案:

答案 0 :(得分:2)

假设您有一个倾听者

@KafkaListener(...)
public void listen(List<...> data) {
    ...
}

设置factory.setBatchListener(true);应该对您有用(只要准备好多个记录即可)。

您还可以使用boot属性

spring:
  kafka:
    listener:
      type: batch

做同样的事情;避免需要声明自己的工厂。

如果打开DEBUG日志记录,则容器将记录轮询返回的记录数。您还可以设置fetch.min.bytesfetch.max.wait.ms来影响如果只有一个立即准备好就返回多少记录...

spring:
  kafka:
    consumer:
      auto-offset-reset: earliest
      enable-auto-commit: false
      properties:
        fetch.min.bytes: 10000
        fetch.max.wait.ms: 2000
    listener:
      type: batch

顺便说一句,当前的2.2.x版本是2.2.7(引导2.1.6)。