我们正在使用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发行版需要做的任何配置?
答案 0 :(得分:2)
假设您有一个倾听者
@KafkaListener(...)
public void listen(List<...> data) {
...
}
设置factory.setBatchListener(true);
应该对您有用(只要准备好多个记录即可)。
您还可以使用boot属性
spring:
kafka:
listener:
type: batch
做同样的事情;避免需要声明自己的工厂。
如果打开DEBUG日志记录,则容器将记录轮询返回的记录数。您还可以设置fetch.min.bytes
和fetch.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)。