如何保證kafka訊息不丟失

2022-01-10 03:53:32 字數 1288 閱讀 8259

這裡的kafka值得是broker,broker訊息丟失的邊界需要對齊一下:

1 已經提交的訊息

2 有限度的持久化

如果訊息沒提交成功,並不是broke丟失了訊息;

有限度的持久化(broker可用)

producer.send(object msg) ;

這個傳送訊息的方式是非同步的;fire and forget,傳送而不管結果如何;

失敗的原因可能有很多,比如網路抖動,傳送訊息超出大小限制;

怎麼破呢?永遠使用帶有返回值值的訊息傳送方式,即producer.send(msg,callback)

通過callback可以準確的告訴你訊息是否傳送成功了,傳送失敗了你也可以有處置方法;

網路抖動: 重發

傳送訊息超出大小:調整訊息大小進行傳送

這種情況並不是broker丟失訊息了,是producer的訊息沒有提交成功。

kafka消費訊息的模型:

即消費訊息,設定好offset,模擬一下:

說明時候消費者丟失資料呢?即先更新位移,再消費訊息,如果消費程式出現故障,沒消費完畢,則丟失了訊息,此時,broker並不知道。

怎麼破?總是先消費訊息,再更新位移;這種可能帶來訊息重複消費的問題,但是不會出現訊息丟失問題;

即開啟了位移自動提交,多執行緒處理的時候,如果有乙個執行緒出現問題,但是還是提交了位移,會發生訊息丟失。

怎麼破? 關閉自動提交位移,消費者端配置引數:enable.auto.commit=false

主要通過調整配置來保證kafka訊息不丟失。

然後就是producer傳送訊息一定要使用帶**函式的方法,並對傳送失敗的情況進行處理。

同時寫consumer程式的時候先消費再提交;

本節先限定了kafka訊息不丟失是針對broker的,基本要求是:訊息已提交到broker,而且至少有乙個broker可用;

然後從生產者,消費者,配置引數這三個方面介紹了如何防止kafka的訊息丟失。

kafka如何保證訊息不丟失

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

kafka保證訊息不丟失

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

kafka如何保證訊息不丟失不被重複消費

在解決這個問題之前,我們首先梳理一下kafka訊息的傳送和消費機制。kafka的訊息傳送機制分為同步和非同步機制。可以通過producer.type屬性進行配置。使用同步模式的時候,有三種狀態來保證訊息的安全生產。可以通過配置request.required.acks屬性。三個屬性分別如下 當ack...