理論上無論什麼組件都會有數據丟失和重複;我們只能從 源頭和出口來解決數據的質量。
基本保證
broker可靠性
- 副本系數:replication.factor = 3
- ⼀般設爲3,爲了更高的安全性,可以設爲5,同時考慮副本的分佈
- 不完全的選舉:unclean.leader.election.enable = true/false
- 允許不同步的副本成爲首領:可用性和一致性之間權衡
- 最少同步副本:min.insync.replicas = 2
- 同步副本小於min.insync.replicas,會阻止生產者繼續寫入消息 NotEnoughReplicasException
生產者可靠性
- 發送確認:acks = 0/1/all
- 0 代表生產者能夠通過網絡把消息發送出去
- 1 代表首領副本已經收到消息並把它寫入到分區文件
- ALL 代表所有副本都收到消息
- 失敗重試:retries = 3
- 可用於解決可重試的錯誤:如LEADER_NOT_AVAILABLE、網絡異常等
- 額外的異常處理:無法通過自動重試解決的問題
- 可用於解決不可重試的錯誤:如消息大小錯誤、認證錯誤、序列化錯誤,或者重試達到上限
消費者可靠性
- group.id = <集羣內唯一>
- 不同的消費者配置不同的group.id,確保各自能消費topic的全量數據
- auto.offset.reset = earliest / latest
- 在沒有偏移量提交時或請求的偏移量在broker上不存在時,啓用此配置
- enable.auto.commit = true
- auto.commit.interval.ms = 300000
- 自動提交的頻度,默認值是每5秒鐘一次