![](/img/trans.png)
[英]Spring Boot Kafka: Consume same message with all instances for specific topic
[英]How to consume multiple kafka message at same topic with multiple ack?
我正在嘗試通過手動確認從某個主題消耗多個消息,但是如果所有消息僅一次通過確認,則確認工作有效。
@KafkaListener(
id = "${kafka.buyers.product-sales-pricing.id}",
topics = "${kafka.buyers.product-sales-pricing.topic}",
groupId = "${kafka.buyers.group-id}",
concurrency = "${kafka.buyers.concurrency}"
)
public void listen( List<String> message, Acknowledgment ack ){}
在上面的代碼中,如果我將以下配置放入spring boot屬性文件中,則每次消耗5條消息:
kafka:
max-poll-records: 5 # Maximum number of records returned in a single call to poll()
但是,如果我確認該收聽,那么它將同時確認所有5條消息。
實際上,我想為每個消息分別確認(表示5消息與5 ack)。
我如何在Spring Boot項目中做到這一點?
使用批處理偵聽器時,將在調用Acknowledgment.acknowledge()
時Acknowledgment.acknowledge()
整個批處理。
對於此用例,我建議使用單個記錄偵聽器,而不是批處理偵聽器。
listen(String msg,確認ack)
目前尚不清楚為什么只對部分批次提交偏移量。
如果必須使用批處理偵聽器,它仍然可以完成,但更為復雜-您將需要獲取List<ConsumerRecord<?, ?>>
以獲取主題/分區/偏移量信息,還需要添加Consumer<?, ?> consumer
使用方法參數(並刪除Acknowledgment
;然后可以根據需要在消費者上調用commitOffsets()
,但是必須在偵聽器線程上調用它-消費者不是線程安全的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.