# Kafka 高水位和 Leader Epoch 機制
* 高水位(High Watermark)
* Leader Epoch:Kafka V0.11 推出
## 高水位
* 水位
* 用于流式處理領域
* 經典定義:在時刻 T,任意創建時間(Event Time)為T‘,且 T‘ <= T 的所有事件都到達或被觀測到,那么 T 被定義為水位
* Streaming System 定義:水位是一個單調增加且表征最早未完成工作(oldest work not yet completed)的時間戳

* Completed:已完成工作
* In-Flight:正在進行中的工作
* 兩者邊界就是水位線
Kafka 中水位概念不同
* Kafka 的水位不是時間戳,與時間無關,其和位置信息綁定
* i.e. 用消息位移表征水位
* Kafka 中的表述為`高水位`
* Kafka 中也有低水位(Low Watermark):與 Kafka 刪除消息相關聯的概念
## 高水位的作用
* 定義消息可見性,即用來標識分區下的哪些消息是可以被消費者消費的
* 幫助 Kafka 完成副本同步

* 上圖:某個 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