[英]Multiple Kafka Listeners With Same GroupId All Receiving Message
我在我們的Spring Boot應用程序中配置了一個kafka偵聽器,如下所示:
@KafkaListener(topicPartitions = @TopicPartition(topic = 'data.all', partitions = { "0", "1", "2" }), groupId = "kms")
public void listen(ObjectNode message) throws JsonProcessingException {
// Code to convert to json string and write to ElasticSearch
}
此應用程序已部署到3個服務器上並在3個服務器上運行,盡管所有這些都具有kms
的組ID,但它們都獲得了消息的副本,這意味着我在Elastic中獲得了3條相同的記錄。 當我在本地運行實例時,將寫入4個副本。
我已經確認生產者通過檢查寫入前后該主題上所有消息的計數,只向該主題寫入1條消息; 它只會增加1。如何預防呢?
當您手動分配分區時,您負責在實例之間分配分區。
該組被忽略。
您必須使用組管理,並讓Kafka為您分配分區,或者為每個實例手動分配分區。
代替topicPartitions
,使用topics = "data.all"
不手動分配分區時會發生什么
A
)與消費者組(讓我們說consumer
)一起加入 A
時,就會發生分區重新分配,因為我們只有一個使用者組consumer
B
嘗試加入同一消費者組consumer
然后再次發生分區重新分配,並且A和B都將獲得分區以收聽消息 在您的情況下,發生的事情是,有多個消費者正在收聽同一分區,因此所有在同一消費者組中收聽相同分區的消費者也將從該分區接收消息。 因此,由於一個以上的消費者在監聽相同的分區,因此消費者組中的消費者之間的互斥性消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.