Kafka 三高架構設計剖析
Kafka 核心問題
- 簡單講下 Kafka 的架構?
- Kafka 是推模式還是拉模式,推拉的區別是什么?
- Kafka 如何廣播消息?
- Kafka 的消息是否是有序的?
- Kafka 是否支持讀寫分離?
- Kafka 如何保證數據高可用?
- Kafka 中 zookeeper 的作用?
- 是否支持事務?
- 分區數是否可以減少?
Kafka 架構中的一般概念:
架構
- Producer:生產者,也就是發送消息的一方。生產者負責創建消息,然后將其發送到 Kafka。
- Consumer:消費者,也就是接受消息的一方。消費者連接到 Kafka 上并接收消息,進而進行相應的業務邏輯處理。
- Consumer Group:一個消費者組可以包含一個或多個消費者。使用多分區 + 多消費者方式可以極大提高數據下游的處理速度,同一消費組中的消費者不會重復消費消息,同樣的,不同消費組中的消費者消息消息時互不影響。Kafka 就是通過消費組的方式來實現消息 P2P 模式和廣播模式。
- Broker:服務代理節點。Broker 是 Kafka 的服務節點,即 Kafka 的服務器。
- Topic:Kafka 中的消息以 Topic 為單位進行劃分,生產者將消息發送到特定的 Topic,而消費者負責訂閱 Topic 的消息并進行消費。
- Partition:Topic 是一個邏輯的概念,它可以細分為多個分區,每個分區只屬于單個主題。同一個主題下不同分區包含的消息是不同的,分區在存儲層面可以看作一個可追加的日志(Log)文件,消息在被追加到分區日志文件的時候都會分配一個特定的偏移量(offset)。
- Offset:offset 是消息在分區中的唯一標識,Kafka 通過它來保證消息在分區內的順序性,不過 offset 并不跨越分區,也就是說,Kafka 保證的是分區有序性而不是主題有序性。
- Replication:副本,是 Kafka 保證數據高可用的方式,Kafka 同一 Partition 的數據可以在多 Broker 上存在多個副本,通常只有主副本對外提供讀寫服務,當主副本所在 broker 崩潰或發生網絡一場,Kafka 會在 Controller 的管理下會重新選擇新的 Leader 副本對外提供讀寫服務。
- Record:實際寫入 Kafka 中并可以被讀取的消息記錄。每個 record 包含了 key、value 和 timestamp。
Kafka Topic Partitions Layout
主題
Kafka 將 Topic 進行分區,分區可以并發讀寫。
Kafka Consumer Offset
consumer offset
Zookeeper
zookeeper
- Broker 注冊:Broker 是分布式部署并且之間相互獨立,Zookeeper 用來管理注冊到集群的所有 Broker 節點。
- Topic 注冊:在 Kafka 中,同一個 Topic 的消息會被分成多個分區并將其分布在多個 Broker 上,這些分區信息及與 Broker 的對應關系也都是由 Zookeeper 在維護。
- 生產者負載均衡:由于同一個 Topic 消息會被分區并將其分布在多個 Broker 上,因此,生產者需要將消息合理地發送到這些分布式的 Broker 上。
- 消費者負載均衡:與生產者類似,Kafka 中的消費者同樣需要進行負載均衡來實現多個消費者合理地從對應的 Broker 服務器上接收消息,每個消費者分組包含若干消費者,每條消息都只會發送給分組中的一個消費者,不同的消費者分組消費自己特定的 Topic 下面的消息,互不干擾。
答案
簡單講下 Kafka 的架構?
Producer、Consumer、Consumer Group、Topic、Partition。
Kafka 是推模式還是拉模式,推拉的區別是什么?
Kafka Producer 向 Broker 發送消息使用 Push 模式,Consumer 消費采用的 Pull 模式。拉取模式,讓 consumer 自己管理 offset,可以提供讀取性能。
Kafka 如何廣播消息?
Consumer group。
Kafka 的消息是否是有序的?
Topic 級別無序,Partition 有序。
Kafka 是否支持讀寫分離?
不支持,只有 Leader 對外提供讀寫服務。
Kafka 如何保證數據高可用?
副本,ack,HW。
Kafka 中 zookeeper 的作用?
集群管理,元數據管理。
是否支持事務?
0.11 后支持事務,可以實現”exactly once“。
分區數是否可以減少?
不可以,會丟失數據。