# Kafka 高水位和 Leader Epoch 机制
* 高水位(High Watermark)
* Leader Epoch:Kafka V0.11 推出
## 高水位
* 水位
* 用于流式处理领域
* 经典定义:在时刻 T,任意创建时间(Event Time)为T‘,且 T‘ <= T 的所有事件都到达或被观测到,那么 T 被定义为水位
* Streaming System 定义:水位是一个单调增加且表征最早未完成工作(oldest work not yet completed)的时间戳
![](https://img.kancloud.cn/fb/2c/fb2c9e883b78c5d10b09b4a9773b8c13_1950x624.png)
* Completed:已完成工作
* In-Flight:正在进行中的工作
* 两者边界就是水位线
Kafka 中水位概念不同
* Kafka 的水位不是时间戳,与时间无关,其和位置信息绑定
* i.e. 用消息位移表征水位
* Kafka 中的表述为`高水位`
* Kafka 中也有低水位(Low Watermark):与 Kafka 删除消息相关联的概念
## 高水位的作用
* 定义消息可见性,即用来标识分区下的哪些消息是可以被消费者消费的
* 帮助 Kafka 完成副本同步
![](https://img.kancloud.cn/c2/24/c2243d5887f0ca7a20a524914b85a8dd_1704x618.png)
* 上图:某个 Partition Leader 副本的高水位图
* 分区高水位以下的消息:已提交消息;反之:未提交消息
* 消费者只能消费已提交消息
* Kafka 事务机制会影响消费者看到的消息范围
* 依赖高水位判断
* 依赖 LSO(Log Stable Offset)的 offset 判断事务型消费者的可见性
* offset 等于高水位的消息也属于未提交消息,i.e. 高水位上的消息是不能被消费者消费的
* LEO(Log End Offset):日志末端位移
* 副本写入下一条消息的 offset
* 数字 15 所在的方框是虚线,i.e. 这个副本当前只有 15 条消息(0-14),下一条新消息的 offset 是 15
* 介于高水位和 LEO 之间的消息属于未提交消息
* 同一个副本对象,其高水位值不会大于 LEO 值
* 高水位和 LEO 是副本对象的两个重要属性
* 分区的高水位就是其 Leader 副本的高水位
## 高水位更新机制
- 概览
- 入门
- 1. 消息引擎系统
- 2. Kafka 术语
- 3. 分布式流处理平台
- 4. Kafka “发行版”
- 5. Kafka 版本号
- 基本使用
- 6. 生产集群部署
- 7. 集群参数配置
- 客户端实践与原理
- 9. Consumer 分区机制
- 10. Consumer 压缩算法
- 11. 无消息丢失配置
- 12. 客户端高级功能
- 13. Producer 管理 TCP
- 14. 幂等生产者和事务生产者
- 15. 消费者组
- 16. 位移主题
- 17. 消费者组重平衡(TODO)
- 18. 位移提交
- 19. CommitFailedException
- 20. 多线程开发者实例
- 21. Consumer 管理 TCP
- 22. 消费者组消费进度监控
- Kafka 内核
- 23. 副本机制
- 24. 请求处理
- 25. Rebalance 全流程
- 26. Kafka 控制器
- 27. 高水位和 Leader Epoch
- 管理与监控
- 28. Topic 管理
- 29. Kafka 动态配置
- 30. 重设消费者组位移
- 31. 工具脚本
- 32. KafkaAdminClient
- 33. 认证机制
- 34. 云下授权
- 35. 跨集群备份 MirrorMaker
- 36. 监控 Kafka
- 37. Kafka 监控框架
- 38. 调优 Kafka
- 39. 实时日志流处理平台
- 流处理
- 40. Kafka Streams
- 41. Kafka Streams DSL
- 42. Kafka Streams 金融
- Q&A