知识卡片
出块双重触发:用消息化时间兜底而非时钟同步
内容
Orderer出块由两条路径共同触发:交易数量或区块字节数达到阈值时立即切割出块,另设一个周期性定时器(如2秒)兜底——即使交易量不够也强制出块,避免通道长时间没有新区块导致查询体验变差。Solo共识组件下定时器直接触发本地切割即可;但Kafka集群下多个Orderer节点各自的本地定时器天然不同步,如果各自独立触发出块,账本就会分叉。Fabric的解法是把”到时间了”本身也包装成一条TimeToCut消息发送到Kafka排序,所有Orderer节点都以自己最先从Kafka分区收到的那条TimeToCut为准出块——把难解的多节点时钟同步问题,转化成了已经解决的Kafka消息顺序问题。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第2章《Orderer排序节点》