kafka哪些情況會導致資料丟失

2021-10-22 14:39:24 字數 2199 閱讀 5524

acks=0

​ 表示生產者將只要資訊傳送,就認為傳送成功了。即伺服器未接收到該訊息也會認為是成功。

acks=1(預設)

​ 生產者傳送訊息,只要分割槽leader寫入成功,即返回傳送成功的資訊。當leader掛掉,其他副本未來得及同步的資料會丟失。

acks=-1(或all)

​ 生產者傳送資訊,該topic所有isr中的副本[注:此副本數是會變化的]都寫入成功,才返回傳送成功的資訊。

kafka錯誤分為可恢復與不可恢復兩種情況。

可恢復:

​ 當出現網路異常等情況時,會產生錯誤資訊,當配置項中retries大於0, 這種錯誤會進行重試傳送,只要重試成功,則進行了自我恢復。

不可恢復:

​ 當傳送的資料超出了預設配置,如傳送大資訊的時候,資料大小超過了單次請求的最大值(max.request.size),則會產生異常,此類錯誤不會重試。此時則會丟失資料。需要程式將此類錯誤資訊傳送的資料自行備份,避免丟失。

​ 1、acks=0

​ 允許資料偶爾丟失,或丟失少量資料影響甚微又追求高吞吐。

​ 2、acks=-1且 retries 的值要大於 0

​ 不允許資料丟失。

​ 3、acks=1,retries 視個人情況設定。

​ 其他情況。

auto.offset.reset = earliest(最早) /latest(最晚)

​ 消費的起始位置,earliest表示當乙個新加入的消費組消費訊息時,從該topic每個分割槽中存在資料的最小offset開始消費。latest表示從該消費組只消費加入後新接收到的資料,不會消費加入之前的資料。

enable.auto.commit = true(預設)/false

​ 是否開啟自動提交

auto.commit.interval.ms

​ 自動提交間隔時間,當enable.auto.commit 為true才生效。

​ 當一批資料假設10條,處理到5條的時候,自動提交了offset,在處理第6條的時候發生異常,再次去拉資料的時候,就會從11開始消費,則丟失了6-10的資料。

​ 當一批資料假設10條,處理到5條的時候,還未提交offset,在處理第6條的時候發生異常,再次去拉資料的時候,就會從0開始消費,則會重複處理1-5條的資料

注:每次處理一條也可能出現以上情況。

​ 每處理完一條就提交offset,不會丟資料,但效率極低。

​ 對批量的資料按分割槽遍歷處理,記錄該分割槽號及消費的偏移量,當出現異常時,則將該分割槽消費的便宜量提交到kafka中。後續再次消費時,會從提交的偏移量開始消費,確保資料消費不重複不丟失。

at-least-once

當拉取一批資料正常消費完全則提交offset,假如10條資料,消費到第6條出現異常,則重新拉取消費,因為未提交offset,則會重新消費本批資料。

exactly-once

在上條情況之上,由程式實現冪等功能,如為每條資料新增乙個unique key,將unique key儲存到redis中,處理資料前先對unique key進行判斷,若不存在則處理,若存在則不處理。

replication-factor=2

​ 表示每個分割槽有多少份資料,用來提高資料的可用性。執行時執行n-1臺機器掛掉。

min.insync.replicas = 2

​ 表示isr佇列集合中最少有多少個副本,預設值是1 。ack為-1時,生產者需要確保資料寫多少份才返回成功。假設replication-factor=3,min.insync.replicas = 2,則ack=-1時,正常情況是replication-factor=3,isr=3,生產者可正常寫入資料,當異常原因(如網路抖動)導致isr由3變為2時,此時生產者仍可正常寫入資料。若replication-factor=3,min.insync.replicas = 3,則當isr由3變為2時,則此時生產者寫入資料將失敗。

unclean.leander.election.enable = false

​ 是否允許從isr佇列中選舉leader。預設false。當設定為true且ack=1時,則當原leader資料寫到10,而乙個副本同步到8,乙個副本同步到9,此時leader掛掉,重新在副本中選擇leader,當同步到8副本的當選leader,則丟失第9,10條資料,反正,則丟失第10條資料。

​ 建議在實際使用中min.insync.replica=replication-factor/2 +1 ,unclean.leader.election.enable =false

Kafka丟資料的情況

1.消費端弄丟了資料 消費者自動提交offset會丟資料,只要關閉自動提交 offset,在處理完之後自己手動提交 offset,就可以保證資料不會丟。2.kafka 弄丟了資料 kafka宕機重新選舉leader的時候,要是 follower沒有及時同步資料,就會丟資料。在 kafka 服務端設定...

Kafka在什麼情況下會丟資料

kafka是高吞吐量資料匯流排,使用得當會使我們處理業務如魚得水,如虎添翼。處理不當也會使系統殘破不堪,維護起來痛苦萬分,我們針對資料可靠性這點,來分析下這個訊息元件在什麼情況下會丟失資料。一 producer配置acks 0 在acks 0模式下,訊息傳輸到broker端沒收到broker的反饋即...

MYSQL中哪些情況會導致索引失效

1.以 開頭的like查詢 優化方案 首先掃瞄二級索引獲取滿足條件的primary key,在根據主鍵回表查詢。select from select actor id from actor where last name like ni tmp inner join actor a on a.act...