producer 的acks
引數值設定為『0』或者『1』,不等待伺服器確認或者只讓leader確認
解決方法:將acks
的值設定為all
或者-1
,讓leader和followers全部進行確認
producer 沒有設定失敗重試
解決方法:根據實際場景將retries
引數值設定為正整數
consumerpoll
到訊息後還未來的及完全消費,便已經提交
解決方法:這種情況是在自動提交的情況下發生的,如果enable.auto.commit
值為true
,可以根據實際場景將auto.commit.interval.ms
的值調大。如果enable.auto.commit
值為false
,就呼叫commitsync
方法手動提交offset。
consumer 在 partition中的位置是通過提自己 offset+1 實現的,offset的提交方式有自動提交和手動提交兩種。自動提交offset情況下,當訊息消費完成,在提交之前(甚至是前一瞬間)consumer 宕機,那麼 consumer 重啟後的poll
的offset依然是宕機前消費的那個offset ,因此造成重複消費。同樣的,手動提交模式下,在提交**呼叫之前, consumer 宕機也會造成訊息重複消費
解決方法:consumer 關閉自動提交,使用手動提交。producer傳送訊息時對訊息封裝乙個唯一標識id。consumer消費訊息前根據唯一標識查詢redis,存在就不消費,不存在就消費,在提交前向redis set一條記錄。kafka api位址
Kafka 訊息丟失和訊息重複消費
producer 的acks引數值設定為 0 或者 1 不等待伺服器確認或者只讓leader確認解決方法 將acks的值設定為all或者 1,讓leader和followers全部進行確認 producer 沒有設定失敗重試解決方法 根據實際場景將retries引數值設定為正整數 consumerp...
kafka訊息丟失和訊息重複的情況
kafka作為訊息佇列,一定會有訊息丟失和訊息重複的問題,那什麼場景下會出現這種情況呢?kafka有乙個引數叫做acks。當生產者向leader傳送訊息後,會返回乙個確認的訊息給生產者。但是什麼時候leader會傳送確認訊息返回給生產者呢?就是通過acks這個引數決定的,這個引數有三種情況0 1 1...
RabbitMQ 重複消費 資料丟失和訊息順序性
1 保證訊息不被重複消費的關鍵是保證訊息佇列的冪等性,這個問題針對業務場景來答分以下幾點 生產者的訊息沒有投遞到mq中怎麼辦?從生產者弄丟資料這個角度來看,rabbitmq提供transaction和confirm模式來確保生產者不丟訊息。transaction機制就是說,傳送訊息前,開啟事物 ch...