Kafka Spring client with container option Assignment Commit Option 它是如何工作的?

Kafka Spring client with container option AssignmentCommitOption how dose it work?

我使用 Kafka Spring 将容器“ConcurrentKafkaListenerContainerFactory”作为批处理消息插入到数据库中,以防发生错误

  1. 错误消息我会将该消息发送到另一个主题。
  2. 如果连接失败或超时,我将回滚数据库事务和生产者事务以防止误报

而且我没有得到 assignmentCommitOption 选项它是如何工作的以及它在 ALWAYS,NEVER,LATEST_ONLY 和 LATEST_ONLY_NO_TX,

之间有何不同

如果分配的分区没有当前提交的偏移量,则此选项控制是否在分配期间提交初始偏移量。

真正只有在使用auto.offset.reset=latest时才有用。

考虑这种情况。

应用程序出现并分配了一个“新”分区;消费者将位于主题的末尾。

未从该 topic/partition 收到任何记录,应用程序已停止。

记录随后发布到 topic/partition 并重新启动消费者应用程序。

由于分区仍然没有提交的偏移量,它将再次定位在末尾,我们不会收到发布的记录。

这可能是您想要的,但也可能不是。

将选项设置为 ALWAYSLATEST_ONLYLATEST_ONLY_NO_TX(默认)将导致在分配期间提交初始位置,以便接收发布的记录。

_NO_TX 变体通过 Consumer 提交偏移量,另一个通过事务生产者提交。