Kafka如何保證不丟訊息

2021-10-08 20:25:18 字數 851 閱讀 2165

生產者(producer) 呼叫send方法傳送訊息之後,訊息可能因為網路問題並沒有傳送過去。

訊息到partition的時候,會分配乙個offset,消費者拉取某個分割槽的訊息後,會自動提交offset,如果這部分訊息還沒有消費,突然掛掉了,這個時候這部分訊息就丟失了

kafka中partition分割槽中存在多個副本,多個副本中,其中有乙個是leader副本,其他都是follower。

我們傳送的訊息發到leader,然後follower副本從leader副本拉資料同步,生產者和消費者只於leader副本互動。其他副本只是儲存作用。

假設leader副本的broker掛掉,這個時候從follower副本中選出的leader資料就有可能不全,發生訊息丟失

設定acks=all

acks=1是生產者傳送的訊息被leader副本接收之後就算傳送成功

acks=all是生產者傳送的訊息被所有副本接收之後就算傳送成功

replication.factor >= 3

每個partition副本數至少有3個副本

建議設定 replication.factor= min.insync.replicas+1;

設定 min.insync.replicas > 1

代表至少寫入兩個副本才算是傳送成功。

設定 unclean.leader.election.enable = false

leader副本訊息同步follower副本過程中,同步情況不一致,設定為false之後,當leader副本發生故障時,就不會從達不到要求的副本中選leader了。

kafka如何保證訊息不丟失

a 消費端弄丟了資料 關閉自動提交offset,在自己處理完畢之後手動提交offset,這樣就不會丟失資料。b kafka弄丟了資料 一般要求設定4個引數來保證訊息不丟失 給topic設定replication.factor引數 這個值必須大於1,表示要求每個partition必須至少有2個副本。在...

如何保證kafka訊息不丟失

這裡的kafka值得是broker,broker訊息丟失的邊界需要對齊一下 1 已經提交的訊息 2 有限度的持久化 如果訊息沒提交成功,並不是broke丟失了訊息 有限度的持久化 broker可用 producer.send object msg 這個傳送訊息的方式是非同步的 fire and fo...

kafka保證訊息不丟失

一 消費端保證訊息不丟失 消費端從broker取到訊息以後,先處理業務邏輯,然後再手動提交,這樣就可以避免消費端訊息丟失。二 生產端訊息不丟失 首先是設定每個訊息分割槽的副本,一本是幾個broker就配置幾個分割槽,然後設定如下,保證生產這生產的訊息傳送到broker時,不但leader確認收到訊息...