kafka 架構
https://cloud.tencent.com/developer/article/2307892 19張圖
生產者架構
消息的磁盤存儲文件結構
https://cloud.tencent.com/developer/article/2307892 19張圖
produce消息分區策略
kafka–基礎知識點–5–生產者分區策略
ISR、OSR、AR 是什么?
ISR:ISR,全稱 in-sync replicas,是一組動態維護的同步副本集合,每個topic分區都有自己的ISR列表,ISR中的所有副本都與leader保持同步狀態(也包括leader本身),只有ISR中的副本才有資格被選為新的leader,
OSR:Out-of-Sync Replicas
AR:Assigned Replicas 所有副本ISR是由leader維護,follower從leader同步數據有一些延遲(具體可以參見 圖文了解 Kafka 的副本復制機制),超過相應的閾值會把 follower 剔除出 ISR, 存入OSR(Out-of-Sync Replicas )列表,新加入的follower也會先存放在OSR中。AR=ISR+OSR。
LEO、HW、LSO、LW等分別代表什么
LEO:是 LogEndOffset 的簡稱,代表當前日志文件中下一條
HW:水位或水印(watermark)一詞,也可稱為高水位(high watermark),通常被用在流式處理領域(比如Apache Flink、Apache Spark等),以表征元素或事件在基于時間層面上的進度。在Kafka中,水位的概念反而與時間無關,而是與位置信息相關。嚴格來說,它表示的就是位置信息,即位移(offset)。取 partition 對應的 ISR中 最小的 LEO 作為 HW,consumer 最多只能消費到 HW 所在的位置上一條信息。
LSO:是 LastStableOffset 的簡稱,對未完成的事務而言,LSO 的值等于事務中第一條消息的位置(firstUnstableOffset),對已完成的事務而言,它的值同 HW 相同
LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值。
故障恢復leader、follower
ack 確認策略
數據傳輸的事務定義通常有以下三種級別:
- 最多一次: 消息不會被重復發送,最多被傳輸一次,但也有可能一次不傳輸
- 最少一次: 消息不會被漏發送,最少被傳輸一次,但也有可能被重復傳輸.
- 精確的一次(Exactly once): 不會漏傳輸也不會重復傳輸,每個消息都傳輸被
at least once
at more once
exactly once
消費者消費策略
https://zhuanlan.zhihu.com/p/716426534
leader epoch
follower 同步leader消息過程 及 leo、hw的變化過程
exactly once = 冪等性+at least once
https://www.cnblogs.com/jiangzishun/p/17679666.html 冪等性
kafka事務
producer 事務 https://www.cnblogs.com/xijiu/p/16917741.html
kafka常用命令
kafka使用場景
kafka數據保存磁盤 為什么這么快
零拷貝
在分布式的情況下如何保證順序消費
kafka消息丟失的場景 及 如何避免消息丟失
kafka為什么不支持讀寫分離
方便實現單調讀(Monotonic Reads)
什么是單調讀呢?就是對于一個消費者用戶而言,在多次消費消息時,它不會看到某條消息一會兒存在一會兒不存在。
如果允許追隨者副本提供讀服務,那么假設當前有 2 個追隨者副本 F1 和 F2,它們異步地拉取領導者副本數據。倘若 F1 拉取了 Leader 的最新消息而 F2 還未及時拉取,那么,此時如果有一個消費者先從 F1 讀取消息之后又從 F2 拉取消息,它可能會看到這樣的現象:第一次消費時看到的最新消息在第二次消費時不見了,這就不是單調讀一致性。但是,如果所有的讀請求都是由 Leader 來處理,那么 Kafka 就很容易實現單調讀一致性。
消息堆積
kafka-consumer-groups
Kafka創建Topic時如何將分區放置到不同的Broker中
- 副本因子不能大于 Broker 的個數;第一個分區(編號為0)的第一個副本放置位置是隨機從 brokerList 選擇的;
- 其他分區的第一個副本放置位置相對于第0個分區依次往后移。也就是如果我們有5個 Broker,5個分區,假設第一個分區放在第四個 Broker 上,那么第二個分區將會放在第五個 Broker 上;第三個分區將會放在第一個 Broker 上;第四個分區將會放在第二個 Broker 上,依次類推;
- 剩余的副本相對于第一個副本放置位置其實是由 nextReplicaShift 決定的,而這個數也是隨機產生的;
kafka監控工具
遍歷AR,如果當前機器在ISR中就它為Leader