知识卡片

term解决Leader脑裂与旧日志延迟commit

普通读书笔记卡

内容

Raft给每任Leader分配单调递增”任期”(term),日志新旧优先看term。这解决两个问题:脑裂——旧Leader同步会被拒绝并自动退位;延迟提交问题(同[[Kafka的HW截断会导致消息丢失]])——旧term日志复制到多数派也不能立即视为已提交,须等新Leader在自己term内提交新日志后才顺带确认。发散:单调递增编号常能同时解决”谁是权威”和”何时可下结论”两类问题。

参考来源

- 位置:第11章《多副本一致性》11.3.3节「term如何解决脑裂」及日志延迟commit场景(源文件:_epub-src/text/part0058.html~059.html) - 结论依据:原文明确说明term是写入日志Leader所在的任期、单调递增,可解决脑裂问题——老Leader发送term=4的过期日志会被Follower拒绝并自动退位;同时说明旧term日志即使复制到多数派,新Leader上台后也不能直接认为是commit,须等新term内有日志commit后才'顺带'确认之前term日志,直接支持卡片论述。 - 原始内容:"term的一个关键作用是可以解决Leader的'脑裂'问题……Follower发现它发过来的日志里面term=4,就知道它是过期的Leader,就会拒绝执行写入操作……老的Leader知道自己过期了,会自动退位……对于旧的term的日志,即使已经被复制到了多数派,仍然不认为是commit的,只有等到新的Leader在自己的term内commit了日志,之前term的日志才能算是被认为commit了。"