kafka訊息避免重複消費 通過uuid來實現

2021-10-06 07:31:47 字數 684 閱讀 5389

在什麼情況下會出現訊息重複消費?

一般來說,重複消費會在兩種情況下出現。

1.訊息在發往a機器後,再次發往b機器,導致消費兩次。

2.訊息往a機器發兩次。

怎麼處理?

對於第一種情況,只需要根據資料的特點做對應的分割槽即可,保證該型別的訊息只會往a機器傳送

kafkalistsender

sender =

newkafkalistsender

<

>

(kafkatopicconfig.

gettopic

(companyid, kafkatopicconfig.topickey.journal)

, kafkatopicconfig.topickey.journal.

getkey()

,(journal)

->

);

對於第二種情況時有uuid即可解決

這個uuid應該存放在**?

有必要存在入redis嗎,沒有必要。

一般來說,journal會出現重複消費只會在訊息傳送的第一次消費過程中,超過一定時間之後,很難再出現這個問題。因此只需要保證在一批訊息過來時不會出現重複消費即可。

該uuid在方法內作為區域性變數即可。

Kafka 訊息丟失和訊息重複消費

producer 的acks引數值設定為 0 或者 1 不等待伺服器確認或者只讓leader確認解決方法 將acks的值設定為all或者 1,讓leader和followers全部進行確認 producer 沒有設定失敗重試解決方法 根據實際場景將retries引數值設定為正整數 consumerp...

Kafka 訊息丟失和訊息重複消費

producer 的acks引數值設定為 0 或者 1 不等待伺服器確認或者只讓leader確認解決方法 將acks的值設定為all或者 1,讓leader和followers全部進行確認 producer 沒有設定失敗重試解決方法 根據實際場景將retries引數值設定為正整數 consumerp...

kafka 訊息順序性,不重複消費

比如說我們建了乙個 topic,有三個 partition。生產者在寫的時候,其實可以指定乙個 key,比如說我們指定了某個訂單 id 作為 key,那麼這個訂單相關的資料,一定會被分發到同乙個 partition 中去,而且這個 partition 中的資料一定是有順序的。n個消費者針對某乙個to...