kafka 三高架構設計剖析

ITPUB社群發表於2024-03-15

來源:碼哥位元組Kafka 核心問題

  • 簡單講下 Kafka 的架構?
  • Kafka 是推模式還是拉模式,推拉的區別是什麼?
  • Kafka 如何廣播訊息?
  • Kafka 的訊息是否是有序的?
  • Kafka 是否支援讀寫分離?
  • Kafka 如何保證資料高可用?
  • Kafka 中 zookeeper 的作用?
  • 是否支援事務?
  • 分割槽數是否可以減少?

Kafka 架構中的一般概念:

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 三高架構設計剖析

Kafka 將 Topic 進行分割槽,分割槽可以併發讀寫。

Kafka Consumer Offset

kafka 三高架構設計剖析

zookeeper

kafka 三高架構設計剖析
  • 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“

分割槽數是否可以減少?

不可以,會丟失資料

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024420/viewspace-3009055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章