kafka消费消息为啥不是批量拉取?而是一条一条拉下来消费?

发布于 2022-09-12 01:06:25 字数 585 浏览 13 评论 0

测试了一下,先往一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云巢 2022-09-19 01:06:25

默认是一条。因为 Kafka 鼓励的是集群消费、集群生产,而不是单机批量消费。

0.10 版本以后新增了一个配置项 max.poll.records,可以用于指定批量消费条数的。除此之外,还需要合理的配置 max.partition.fetch.bytefetch.max.wait.ms 两个参数。

对于使用 SpringBoot 的项目,如何配置上述参数,可自行查询文档。

REF: https://cwiki.apache.org/conf...:+KafkaConsumer+Max+Records

踏雪无痕 2022-09-19 01:06:25

可以的喔,看官方文档

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文