kafka消费消息为啥不是批量拉取?而是一条一条拉下来消费?
测试了一下,先往一个topic里发很多消息,启动项目监听这个topic,发现是一条条拉消息下来的,为啥不是一次性都拉下来呢?
是不是使用的不对,哪里要配置么?
想象中的效果应该是,如果topic有很多没消费的消息,它能一次拉一批下来,不然效率也太低了
// 用springboot项目测试
// 这个topic一个分区一个副本
@KafkaListener(topics = {"test-topic"}, groupId = "test")
public void listen(ConsumerRecord<?, ?> record) throws InterruptedException {
Optional<?> kafkaMessage = Optional.ofNullable(record.value());
if (kafkaMessage.isPresent()) {
Object message = kafkaMessage.get();
System.out.println("--> " + message);
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
默认是一条。因为 Kafka 鼓励的是集群消费、集群生产,而不是单机批量消费。
0.10 版本以后新增了一个配置项
max.poll.records
,可以用于指定批量消费条数的。除此之外,还需要合理的配置max.partition.fetch.byte
和fetch.max.wait.ms
两个参数。对于使用 SpringBoot 的项目,如何配置上述参数,可自行查询文档。
可以的喔,看官方文档