网站制作和推广,在线二维码制作,网页小游戏入口,网站规划是什么意思Kafka 的 高水位#xff08;High Watermark, HW#xff09; 和 低水位#xff08;Low Watermark, LW#xff09; 是和数据存储、消费进度、日志清理等密切相关的重要概念。我们用一个 “蓄水池” 的比喻来形象地解释它们的作用。 1. Kafka 里的数据像一个蓄水池
Kafka 的数…Kafka 的 高水位High Watermark, HW 和 低水位Low Watermark, LW 是和数据存储、消费进度、日志清理等密切相关的重要概念。我们用一个 “蓄水池” 的比喻来形象地解释它们的作用。 1. Kafka 里的数据像一个蓄水池
Kafka 的数据存储在 日志log segment 里每个分区partition就像一个不断增长的日志文件数据会随着生产者producer的发送不断增加消费者consumer从中读取数据。你可以把它想象成一个 不断注水的蓄水池。 2. 高水位HW消费安全线
高水位HW 就像是蓄水池里的 “最低可见水位”只有水面之下的水数据才是消费者能喝消费到的。
Kafka 是分布式的每个分区的消息可能被多个副本replica存储在不同的机器上。只有当 所有 ISRIn-Sync Replicas即同步副本都确认收到了某个消息这个消息才被认为是“稳定的”并可以被消费者消费。高水位HW指的就是最早的 ISR 共同确认的那条消息的偏移量offset消费者只能消费到这个位置的数据再往后的数据还不能保证稳定不能消费。
类比
你可以想象蓄水池里有一根透明的管子管子以下的水可以喝已经被多个副本确认。但管子上面的水新写入但未完全确认的消息还在“沉淀”过程中可能会被回滚删除。
作用
保证数据一致性确保所有消费者只能消费已经被多个副本确认的数据避免数据丢失。 3. 低水位LW清理水池底部的陈旧数据
低水位LW 就是 “蓄水池的排水口”用来删除过旧的数据防止池子被塞满。
Kafka 会根据 日志清理策略Log Retention Policy 来删除旧数据比如
按时间删除log.retention.hours只保留最近 X 小时的数据。按大小删除log.retention.bytes当日志文件超过一定大小后删除最早的数据。
低水位LW指的就是最早还能被 Kafka 保留的偏移量offset更早的数据都会被清理掉防止日志无限增长。
类比
如果池子太满底部的水就要排走以腾出空间给新的水数据。低水位LW以下的数据offset会被 Kafka 自动清理消费者也无法再读取这些数据。
作用
避免日志文件无限增长节省存储空间。提高 Kafka 性能防止查询过大数据时变慢。 4. 高水位和低水位的关系
高水位HW不断上升确保数据可以安全消费。低水位LW也在上升确保老数据及时清理。高水位 - 低水位之间的数据就是 Kafka 当前可消费的数据消费者只能消费这个范围的数据。 5. 总结
概念作用类比高水位HW保障消费者只能消费到安全的数据透明管子以下的水可安全饮用低水位LW触发日志清理避免存储爆炸水池排水口定期排掉老水 6. 延伸思考
如果 ISR 副本少了比如机器故障高水位就不会提升导致消费者无法消费新数据。如果低水位设得太低可能会让消费者还没消费就被删数据导致数据丢失。Kafka 通过合理调整 log.retention.* 和副本同步策略来平衡存储和消费的可靠性。
这样理解的话Kafka 高低水位的原理是不是就清晰很多了