You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raft集群中未提交条目何时提交?无新写入时是否永久无法提交?

Raft协议场景疑问解答

未提交变更是否会永远无法提交?

是的,如果集群后续没有任何写入操作,这个未提交的变更会永远处于未提交状态。

Raft协议中,日志条目提交需要满足两个核心条件:

  • 该条目已被复制到集群超过半数的节点上;
  • 当前任期的Leader只会主动提交自身任期内创建的条目,对于前序任期的未提交条目,仅会在当前任期有新条目被提交时,顺带提交那些已经被多数节点复制的旧任期条目。

在你模拟的场景里,旧Leader崩溃前虽把条目复制到了部分节点(包括新Leader),但新Leader属于新任期,不会主动去提交前一任期的未提交条目。没有新写入就不会产生新的任期条目,自然不会触发顺带提交旧条目的逻辑,所以这个旧条目会一直留在日志里,永远不会被提交。

客户端能否感知到这个未提交变更?

不能,客户端读取集群状态时完全无法感知到这个未提交的变更。

Raft协议明确规定:只有已提交的日志条目才能被应用到节点的状态机中,客户端读取的是状态机的当前状态,而非日志中未提交的内容。不管客户端是向Leader还是Follower发起读取请求,遵循Raft读取规则的节点都会返回已提交条目对应的状态——比如Follower会先向Leader同步最新的提交位置,确保自身状态机是最新的已提交状态后再响应请求。未提交的日志条目不会被应用到状态机,所以客户端根本看不到这个变更。

内容的提问来源于stack exchange,提问作者rascio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:42:33