知识卡片
Kafka的HW截断会导致消息丢失
内容
即使ACK=ALL,Kafka仍可能丢消息:HW(已复制成功的最大Offset)有传播延迟,Follower的HW永远比Master滞后一拍。若此时Leader切换,新Leader和Follower依据滞后HW做日志截断,连续两次切换可能把已确认消息冲掉。发散:”多数派确认”与”所有节点已知晓”间存在时间差,正是Raft用[[term解决Leader脑裂与旧日志延迟commit]]处理的同类问题。
参考来源
- 位置:第11章《多副本一致性》11.1节Kafka HW截断场景分析(源文件:_epub-src/text/part0053.html)
- 结论依据:原文明确说明Slave2为了和Slave1对齐会做HW截断,把HW之后的日志删除,因为3和5之间是不确定状态;总结HW会在新Master上位和机器宕机重启两种场景发生截断,连续两次Master切换可能导致已确认日志被真正冲掉,直接支持卡片论述。
- 原始内容:"Slave2为了和Slave1对齐,首先会做HW截断,也就是把HW=3之后的日志全部删除,因为对于Slave2来说,它只能保证HW=3之前的是正确的……HW会在两种场景下发生截断:(1)新的Master上位,其他Slave要从新的Master处同步数据……(2)机器宕机重启,要做HW截断。"