Java 我对承认的原则感到困惑

Java 我对承认的原则感到困惑,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,版本:2.1.11 问题: 我有一些错误的参数配置: 最高投票记录:500 最大轮询间隔毫秒:10000。 但消费大约需要2.5万英镑。因此,它将成为一个例外: org.apache.kafka.clients.consumer.CommitFailedException:无法完成提交,因为组已重新平衡分区并将其分配给其他成员。这意味着对poll()的后续调用之间的时间比配置的max.poll.interval.ms长,这通常意味着轮询循环在消息处理上花费了太多的时间。您可以通过增加会话超时或使

版本:2.1.11

问题: 我有一些错误的参数配置: 最高投票记录:500 最大轮询间隔毫秒:10000。 但消费大约需要2.5万英镑。因此,它将成为一个例外: org.apache.kafka.clients.consumer.CommitFailedException:无法完成提交,因为组已重新平衡分区并将其分配给其他成员。这意味着对poll()的后续调用之间的时间比配置的max.poll.interval.ms长,这通常意味着轮询循环在消息处理上花费了太多的时间。您可以通过增加会话超时或使用max.poll.records减少poll()中返回的批的最大大小来解决此问题

然后我修正了参数,所以这个错误被解决了

然而,我很困惑,我已经在使用一条消息时通过ack.acknowledge()提交了。 为什么偏移量根本无法提交? 这是密码

@KafkaListener(topics = "${kafka.topic}")
public void consume(ConsumerRecord<String, SyncResMessage> record, Acknowledgment ack) {
    
    try {
        // consume message
        consumerService.dealResource(record.value());
    } catch (Exception e) {
        LOGGER.error("error when consume data, data key is {}, exception is {}.", record.key(), e);
    }

    if (ack != null) {
        LOGGER.info("commit successfully.");
        ack.acknowledge();
    } else {
        LOGGER.error("message of commit is null, record is {}.", JsonUtil.toString(record));
    }
}
@KafkaListener(topics=“${kafka.topic}”)
公共无效消费(消费者记录记录、确认){
试一试{
//消费信息
consumerService.dealResource(record.value());
}捕获(例外e){
error(“使用数据时出错,数据键为{},异常为{}.”,record.key(),e);
}
如果(确认!=null){
info(“提交成功”);
确认();
}否则{
error(“提交消息为null,记录为{}.”,JsonUtil.toString(记录));
}
}
任何帮助都将不胜感激~

也许这就是答案。 手动意味着不立即提交,它将更新此映射。 手动立即意味着立即提交。

也许这就是答案。 手动意味着不立即提交,它将更新此映射。
手动立即意味着立即提交。

这是正确的。使用手动,提交将在批处理后排队并应用。请确认~~这是正确的。使用手动,提交将排队并在批处理完成后应用。thx供您确认~~