在 Kafka 中,数据截断(Data Truncation)是 Kafka 为了保证多副本之间数据一致性而采取的一种核心容错机制。 简单来说,数据截断是指:当副本(Replica)发现自己的本地日志(Log)与当前 Leader 的日志出现分歧时,它会主动删除(截断)自己日志尾部那些未被确认或与 Leader 不一致的消息,以强制和当前的 Leader 保持一致。 在 Kafka 中,Leader 的日志始终被视为“唯一真理(Source of Truth)”。 以下是关于数据截断机制的详细解析以及它发生的具体场景: --- 一、 核心概念:依靠什么进行截断? 在了解场景之前,需要知道 Kafka 是如何判断“该从哪里截断”的: 1. 高水位(High Watermark, HW): HW 表示该分区中所有处于 ISR(同步副本集合)中的副本都已成功复制的最高位移。在 Kafka 0.11 版本之前,副本主要依靠 HW 来进行数据截断。 2. Leader Epoch(领导者纪元): 由于单纯依靠 HW 截断在某些极端宕机场景下会导致数据丢失或副本数据不一致,Kafka 从 0...