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...