宛城區(qū)網(wǎng)站推廣seo有哪些優(yōu)缺點?
目錄
Broker 接收生產(chǎn)者消息和返回消息給消費者的流程邏輯分析
Broker 處理生產(chǎn)者消息的核心流程
Broker 處理消費者消息的核心流程
關鍵點總結(jié)
Broker 接收生產(chǎn)者消息和返回消息給消費者的流程邏輯分析
Broker 處理生產(chǎn)者消息的核心流程
- 接收請求
-
- Broker 的
SocketServer
接收來自生產(chǎn)者的ProduceRequest
(基于 Reactor 網(wǎng)絡模型)。
- Broker 的
- 請求解析與驗證
-
- 解析請求頭(Topic、Partition、消息數(shù)據(jù))。
- 驗證 Topic 是否存在、生產(chǎn)者是否有寫入權限(ACL/SASL)。
- 定位 Leader 副本
-
- 根據(jù) Partition ID 找到對應的 Leader 副本(元數(shù)據(jù)存儲在內(nèi)存或 KRaft/ZooKeeper)。
- 寫入日志文件
-
- 消息以順序追加方式寫入 Leader 副本的 Log 文件(
.log
),并更新索引文件(.index
)。
- 消息以順序追加方式寫入 Leader 副本的 Log 文件(
- 副本同步(ISR 機制)
-
- Leader 將消息推送給 ISR(In-Sync Replicas)列表中的 Follower 副本。
- 若 Follower 副本同步超時(
replica.lag.time.max.ms
),會被移出 ISR。
- 響應生產(chǎn)者
-
- 根據(jù)
acks
配置返回響應:
- 根據(jù)
-
-
acks=0
:不等待確認,直接返回成功。acks=1
:等待 Leader 寫入完成。acks=all
:等待所有 ISR 副本確認。
-
設計思想:
- 高吞吐:順序 I/O + 頁緩存(Page Cache)優(yōu)化寫入性能。
- 可靠性:ISR 機制保證數(shù)據(jù)冗余,避免單點故障。
Broker 處理消費者消息的核心流程
- 接收請求
-
- Broker 的
SocketServer
接收消費者的FetchRequest
(指定 Topic、Partition、Offset)。
- Broker 的
- 請求解析與驗證
-
- 驗證消費者權限、Offset 有效性(是否在 Log 的保留范圍內(nèi))。
- 定位 Leader 副本
-
- 確認消費者請求的 Partition Leader 副本所在 Broker(若當前 Broker 不是 Leader,返回錯誤)。
- 讀取日志文件
-
- 根據(jù) Offset 從 Log 文件中定位消息位置,利用索引文件(
.index
)快速查找。
- 根據(jù) Offset 從 Log 文件中定位消息位置,利用索引文件(
- 零拷貝發(fā)送
-
- 使用
sendfile
系統(tǒng)調(diào)用,直接從頁緩存(Page Cache)發(fā)送數(shù)據(jù)到網(wǎng)絡,避免用戶態(tài)內(nèi)存拷貝。
- 使用
- 返回響應
-
- 封裝消息數(shù)據(jù)到
FetchResponse
,包含實際 Offset、消息內(nèi)容及元數(shù)據(jù)。
- 封裝消息數(shù)據(jù)到
設計思想:
- 低延遲:零拷貝技術減少 CPU 和內(nèi)存開銷。
- 高效讀取:稀疏索引(Sparse Index)快速定位消息位置。
關鍵點總結(jié)
- 生產(chǎn)者寫入:
-
- 強依賴 Leader 副本和 ISR 機制保障數(shù)據(jù)一致性。
acks
配置直接影響可靠性和延遲。
- 消費者讀取:
-
- 零拷貝技術是 Kafka 高吞吐的關鍵。
- Offset 有效性檢查防止讀取過期或不存在的數(shù)據(jù)。
- Broker 角色:
-
- 同時承擔 Leader 和 Follower 副本的讀寫協(xié)調(diào)。