关于Kafka中的确认模式,以下是我找到的2个文档:
\n
\n- 参考1: https: //docs.spring.io/spring-kafka/docs/1.0.0.M1/reference/html/_reference.html#_committing_offsets
\n- 参考2: https: //appdoc.app/artifact/org.springframework.kafka/spring-kafka/1.0.2.RELEASE/org/springframework/kafka/listener/config/ContainerProperties.html
\n
\n
从Reference1来看,offset是在消息处理完之后commit\xc2\xa0,即Consumer端的Listener是否顺利返回,没有抛出异常。
\n
从参考文献2来看,偏移量是在消息传递给监听器之后提交的,即即使Consumer端的监听器抛出异常,偏移量也已经被提交了。
\n
在本地测试后,我觉得该行为与参考文献 1 一致。
\n
\n- 问题 1 - 我对参考文献 1 的理解正确吗?
\n- 问题 2 - 假设我的监听器不是批处理监听器,并且 ackMode 是 BATCH。ack 对于下面的监听器是如何工作的。是不是像 spring 那样进行轮询,比如说收到 10 条消息,然后将每条消息传递给侦听器,然后执行它们。最后,如果所有这些都执行没有任何错误,则 spring 会偏移提交,否则不会?BATCH在上述场景中是如何工作的?
\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