【发布时间】:2022-05-03 21:51:03
【问题描述】:
使用 spring-kafka,有两种类型的 Kafka 监听器。
@KafkaListener(groupId = "group1", topics = {"my.topic"})
public void listenSingle(String message, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) {
/* Process my kafka message */
}
/*
Consumer factory is initialized with setBatchListener(true)
*/
@KafkaListener(groupId = "group1", topics = {"my.topic"})
public void listenBatch(List<String> messages, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) throws Exception {
messages.forEach({
/* Process my kafka message */
});
}
根据文档,它似乎对 Kafka 消费者没有任何影响(无论如何都会轮询多条消息)。
然后我不明白为什么要使用批处理侦听器而不是其他侦听器,因为批处理侦听器有一些记录侦听器没有的限制(拦截器、偏移管理等)?
也许我误解了什么?批处理侦听器有什么好处?
【问题讨论】:
-
也许是因为您可以确认整个批次而不是单个消息?
-
@cricket_007 说的很好,逐个确认消息对性能的影响真的很大吗?
-
可以,但要看你是至少要一次,还是最多一次
标签: java spring apache-kafka spring-kafka