1.需求:近來有小夥伴反應他負責的那塊服務出現了kafka訊息重複消費的問題。
2.解決:
出現重複消費的原因:消費者(consumer)依據偏移量(offset)讀取訊息, 消費完訊息後,會向kafka的節點(broker) 傳送乙個訊息被消費的反饋,也就是提交該訊息的偏移量,然後broker更新對應訊息的consumer_offset中,接著等待下個消費者依據偏移量讀取訊息。
消費者提交offset的預設時間是5分鐘,超過這個時間,若有別的消費者請求訊息,就會形成重複消費。
方法1:修改微服務關於消費者引數-每次消費者拉取(poll)訊息的條數(預設500)
spring.kafka.consumer.max-poll-records
方法2:延長微服務關於消費者引數-提交offset的時間(預設5分鐘)
spring.kafka.properties.max.poll.interval.ms
方法3:修改業務邏輯,提高消費者消費能力
#預設500
spring.kafka.consumer.max-poll-records=100
#預設300000,單位毫秒
spring.kafka.properties.max.poll.interval.ms=600000
spring:
kafka:
consumer:
max-poll-records: 100
properties:
max:
poll:
interval:
ms: 600000
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 訊息重複的場景及解決方案
訊息重複和丟失是kafka中很常見的問題,主要發生在以下三個階段 生產者階段 broke階段 消費者階段 根本原因 生產傳送的訊息沒有收到正確的broke響應,導致生產者重試。生產者發出一條訊息,broke落盤以後因為網路等種種原因傳送端得到乙個傳送失敗的響應或者網 絡中斷,然後生產者收到乙個可恢復...