簡體   English   中英

如何在多個主題的同一主題上使用多個kafka消息?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM