本文討論的是假設存在完美無缺的producer和consumer, 從broker角度保障資料可靠的機制。
當isr集合發生增減 或者isr集合中任一副本leo發生變化時,都會影響整個分割槽的hw。
如上圖所示:leader的leo為9,follower的leo為7,而follower2的leo為6,若判定這三個副本都處於isr集合中,那麼分割槽的hw為6;若follower3被判定失效被剝離出isr集合,那麼此時分割槽hw為leader和follower中leo的最小值,即為7.
每個partition會在磁碟記錄乙個recoverypoint(記錄在recovery-point-offset-checkpoint中), 記錄已經flush到磁碟的最大offset。
1、recovery過程
2、segment的優點:
總結:1、kafka利用zookeeper去選舉出controller;2、kafka通過controller選指定出leader和follower,而無需通過zookeeper了。
1、producer角度
當producer向leader傳送資料時,可以通過acks引數設定資料可靠性的級別:
request.required.acks:設定為-1 等待所有isr列表中的replica接收到訊息後才算寫成功;
min.insync.replicas: 設定為大於等於2,保證isr中至少有兩個replica
producer要在吞吐率和資料可靠性之間做乙個權衡
2、consumer角度(資料一致性)
若某條訊息對consumer可見,那麼即使leader宕機了,在新leader上資料依然可以被讀到
Kafka訊息可靠性
如果mq沒有類似資料庫事務結構和保證,是不可能達到訊息投遞100 可靠的,極端情況下訊息投遞要麼丟失或重複。下面咋們從producer,broker,consumer的角度分析一下kafka中會出現哪些情況。目前生產者傳送訊息 request.required.acks 有三種方式。acks 0 p...
kafka 九 Kafka訊息的可靠性
沒有乙個中介軟體能夠做到百分之百的完全可靠,可靠性更多的還是基於幾個9的衡量指標,比如4個9 5 個9.軟體系統的可靠性只能夠無限去接近100 但不可能達到100 所以kafka如何是實現最大可能的可靠性呢?你可以建立更多的分割槽來提公升可靠性,但是分割槽數過多也會帶來效能上的開銷,一般來說,3個副...
5 Kafka訊息可靠性
在訊息中介軟體裡,有乙個非常重要的問題就是怎麼保證訊息不丟失,而這就是訊息的可靠性問題。1 acks 這個引數用於控制producer生產訊息的永續性。當一條訊息被提交,只要有任何乙個副本儲存了該訊息,並且副本存活,那麼就可以認為該訊息是不可丟失的。當producer傳送一條訊息給kafka集群時,...