Spring Kafka BATCH ack 模式如何与非批处理监听器一起工作?

Pra*_*ddy 6 java spring apache-kafka spring-kafka

关于Kafka中的确认模式,以下是我找到的2个文档:

\n
    \n
  1. 参考1: https: //docs.spring.io/spring-kafka/docs/1.0.0.M1/reference/html/_reference.html#_committing_offsets
  2. \n
  3. 参考2: https: //appdoc.app/artifact/org.springframework.kafka/spring-kafka/1.0.2.RELEASE/org/springframework/kafka/listener/config/ContainerProperties.html
  4. \n
\n

从Reference1来看,offset是在消息处理完之后commit\xc2\xa0,即Consumer端的Listener是否顺利返回,没有抛出异常。

\n

从参考文献2来看,偏移量是在消息传递给监听器之后提交的,即即使Consumer端的监听器抛出异常,偏移量也已经被提交了。

\n

在本地测试后,我觉得该行为与参考文献 1 一致。

\n
    \n
  1. 问题 1 - 我对参考文献 1 的理解正确吗?
  2. \n
  3. 问题 2 - 假设我的监听器不是批处理监听器,并且 ackMode 是 BATCH。ack 对于下面的监听器是如何工作的。是不是像 spring 那样进行轮询,比如说收到 10 条消息,然后将每条消息传递给侦听器,然后执行它们。最后,如果所有这些都执行没有任何错误,则 spring 会偏移提交,否则不会?BATCH在上述场景中是如何工作的?
  4. \n
\n
    @KafkaListener(topics = "topicA", groupId = "gid")\n    @SendTo\n    public Message<Foo> listen(Bar msg)\n    {\n      //some work\n    }\n
Run Code Online (Sandbox Code Playgroud)\n