系列目錄
kafka原理和實踐(三)spring-kafka生產者源碼
kafka原理和實踐(四)spring-kafka消費者源碼
=========正文分割線===============
關於kafka原理網上文章很多,但能真正快速入門的幾乎沒有(要不就是原文翻譯官網...實在枯燥無味之極),本章盡量采用圖文的方式,提綱挈領的闡述原理。
一、kafka拓撲圖
大家都知道kafka是依賴zookeeper集群的,一般最少也要三台服務器來實現HA。拓撲圖如下,分三層:
1.Producers:消息生產者,push消息給Brokers.發送時根據不同topic選擇不同分區(在Broker上)。
2.Brokers:注冊在zookeeper節點上。
3.Consumers:消息消費者,從brokers上根據訂閱的topic選擇不同分區,poll數據,執行消費。
二、名詞解釋
1.producer:消息生產者,發布消息到 kafka 集群的終端或服務。
2.broker:kafka 集群中包含的服務器。
3.topic:每條發布到 kafka 集群的消息屬於的類別,即 kafka 是面向 topic 的。
4.partition:partition 是物理上的概念,每個 topic 包含一個或多個 partition。kafka 分配的單位是 partition。
5.consumer:從 kafka 集群中消費消息的終端或服務。
6.Consumer group:high-level consumer API 中,每個 consumer 都屬於一個 consumer group,每條消息只能被 consumer group 中的一個 Consumer 消費,但可以被多個 consumer group 消費。
7.replica:partition 的副本,保障 partition 的高可用。
8.leader:replica 中的一個角色, producer 和 consumer 只跟 leader 交互。
9.follower:replica 中的一個角色,從 leader 中復制數據。
10.controller:kafka 集群中的其中一個服務器,用來進行 leader election 以及 各種 failover。
11.zookeeper:kafka 通過 zookeeper 來存儲集群的 meta 信息。
三、生產模型
kafka生產者多線程異步發送模型如下圖,主要包含2個流程:1)數據批量存儲,批量發送2)Netty NIO 發送數據
大概看一下流程,理解個大概即可,具體見后續源碼分析章節。
四、消費模型
根據xml配置的不同啟動不同的容器(ConcurrentMessageListenerContainer/MessageListenerContainer),下圖為並發消息監聽器容器啟動流程,主要包含2個主流程:
1.從cluster拉取消息
2.消費消息