当前位置: 首页 > 知识库问答 >
问题:

SpringKafka2.2。2消费者只返回一条记录,而不是最大轮询记录

令狐烨烨
2023-03-14

我们正在使用Spring Kafka 2.2.2版本从Kafka中检索记录,使用@KafkaListener和Con电流tKafkaListenerContainerFactory。我们已经配置了max-pore-记录为5,但是它总是在列表中只给消费者1条记录,而不是5条记录。

虽然配置相同,但它在Spring Kafka 2.1中也能工作。4.释放。

这是我们的申请表。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个答案

文寒
2023-03-14

假设你有一个听众

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

设置工厂。setBatchListener(true) 应该适合您(只要有多条记录准备就绪)。

您还可以使用boot属性

spring:
  kafka:
    listener:
      type: batch

做同样的事情;避免申报自己的工厂。

如果启用调试日志记录,容器将记录轮询返回的记录数。您还可以设置fetch。最小字节数获取。麦克斯,等等。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)。

 类似资料:
  • 我正在尝试使用ReplyingKafkaTemplate,偶尔会看到下面的消息。 没有待处理的回复:消费者记录(主题=请求-回复-主题,分区=8,偏移量=1,创建时间=1544653843269,序列化密钥大小=-1,序列化值大小=1609,标题=记录标题(标题=[记录标题(键=kafka_correlationId,值=[-14,65,21,-118,70,-94,72,87,-113,-91,

  • 这里模型里有3行role_model里有1行所以一定是这样的 这就是界面 这是服务实现: 在控制器Restapi 这只返回了一条记录 1 UserManagement NULL 21 0 1 TEST 1

  • 问题内容: 我有一个具有相似结构和数据的示例表,如下所示: 表在每个学生出现的所有科目中都有每个学生的合并标记。 请帮助我,编写一个查询以提取每个学生( 不分学科/其他学生 )获得的MAXIMUM分数,如下所示: 按S_Name和Max(MARK_Value)分组 问题答案: 使用窗口功能 或者您可以使用相关的子查询

  • 问题内容: 桌子: 查询: 结果: 问题: 如何重写查询,使其返回post_id-> 83而不是post_id-> 81? 他们都有相同的论坛ID和主题ID,但是post_id-> 81的日期早于post_id-> 83。 但是,Group By似乎获得了“第一”记录,而不是“最新”记录。 我尝试将查询更改为 但这同时返回post_id 81和83 问题答案: 如果选择在group子句中未使用且不

  • 我观察到,运动流中存在一些记录,但KCL消费者应用程序尚未收到这些记录。发生这种情况的原因是什么?之前和之后的记录都很好。 所有异常都在我的应用程序中消耗,KCL不会收到。所以http://docs.aws.amazon.com/streams/latest/dev/troubleshooting-consumers.html#w1ab1c11c11c15b9的情况也没有发生。 一些细节:打开分片

  • 问题内容: 我想从MySQL查询返回第二条,第三条或第四条记录(基于ID递增的查询) 问题是,我不知道ID,只是它是查询中的第三行。 问题答案: 它说从记录n开始返回一个记录。