【发布时间】:2017-04-29 22:53:51
【问题描述】:
我想知道当 AckMode 在 spring kafka 中设置为 MANUAL 时提交是如何工作的。
下面是我在KafkaConfig中设置的属性
containerProperties.setAckMode(AbstractMessageListenerContainer.AckMode.MANUAL);
listener 代码
@KafkaListener(id="POC", topics = "TestTopic", group = "TestGroup")
public void listen(ConsumerRecord<String,KafkaPayload> record, Acknowledgment acknowledgment) {
countDownLatch.countDown();
acknowledgment.acknowledge();
}
我正在按照 spring kafka 文档执行acknowledgement,但这仅意味着我的消息被标记为 sent 而不是 consumed(这是我的理解)。
在这种情况下,我应该调用
commitSync()方法吗? 如果是,我从哪里调用它,因为我需要获得对KafkaConsumer的引用。 如果否,它是如何在内部工作的,我可以跟踪它吗?是否有
commitId或某个返回值? 我的想法是知道是否消费了特定的消费者记录。 我想存储该值以用于内部跟踪。- kafka 是否在内部维护消费者记录中的任何状态,例如(Acknowledged、Committed、Not Committed),这有助于分类。
这真的可以帮助我区分有多少记录被消耗,有多少是待处理的以及它们的状态。
【问题讨论】:
标签: apache-kafka kafka-consumer-api spring-kafka