BATCH 与 MANUAL 和 ack 与 commit

BATCH vs MANUAL and ack vs commit

在文档中:

BATCH: Commit the offset when all the records returned by the poll() have been processed.

MANUAL: The message listener is responsible to acknowledge() the Acknowledgment. After that, the same semantics as BATCH are applied.

如果在两种情况下都处理了 poll() 返回的所有记录时提交了偏移量,那么我不明白其中的区别,你能给我一个使用不同方式使用 MANUAL ack 模式的场景吗?

如果我使用 MANUAL 模式并且不在我的 KafkaListener 中调用 acknowledge() 是否与 BATCH 模式相同?如果我调用 acknowledge() 会发生什么变化?

也许我不明白 spring kafka

中提交和确认概念之间的区别

在完美世界中,当您的应用程序始终处于 UP 状态时,您绝对不需要这些提交。只是因为 Kafka Consumer 在内部跟踪轮询调用之间的偏移量。可能会出现这样的情况,即您真的不需要对交付给您的每一批次做出承诺。那就是 MANUAL 来救援的时候了。使用 BATCH 模式你没有控制权,框架会为你执行它。使用 MANUAL,您可以决定现在或稍后提交,有些是在处理了几批之后。

之所以称为acknowledge,是因为我们可能不会立即执行提交,而是将其存储在内存中以供后续轮询周期使用。提交必须完全在 Kafka 消费者线程上执行。