Apache Kafka Part 1 — Introduction

Distributed streaming platform

Duncan Kuo
KKday Tech Blog
7 min readMar 23, 2023

--

Photo by Yannik Mika on Unsplash

什麼是 Apache Kafka ?

在了解 Kafka 之前我們可以先知道什麼是 streaming platform,stream 代表沒有終點,是個永無止盡的資料流。他將不斷的發送信息給你,而你可以即時的獲取資料。

什麼是 distributed ? 分佈式集群表示 Kafka 裡有多個 worker 能夠及時處理所接受到的資料,而這些節點我們稱為 Broker

最後,當你進入到 Kafka 官網你會發現這個詞,即是上述所結合而成。

A distributed streaming platform

正式分散式串流集群讓 Kafka 具備彈性、可靠性、可擴展和容錯性。

Apache Kafka 能帶給你什麼 ?

Kafka 是一個 Open Source 的 Message Queue,如常見的 AWS SQS、GCP Pub/Sub、RabbitMQ等,提供發布與訂閱資料串接資料流,應用場景如:各種使用者事件 (Events)、指標 (Metrics)、日誌 (Log)。

透過發布與訂閱的特性,能降低資料流的複雜性,在過往如果有擁有不同的資料取用者,彼此傳遞資料都需要透過各種串接,間接提高了元件之間的複雜度,而 Kafka 的出現將使不同的資料消費者都能共同獲取同一份資料。

Photo by cloudkarafka

為什麼使用 Apache Kafka ?

  • 高吞吐量:單節點每秒處理幾十上百萬的資料量。即使存儲了數 TB 的消息,它也保持穩定的性能。
  • 高性能:單節點支持上千個客戶端,並保證零停機和零資料丟失。
  • 資料持久化:透過將資料持久化到硬碟以及 replication 防止資料丟失。
  • 分佈式系統易於擴展:所有的元件都會有多個節點,均為分佈式的。無需停機即可擴展機器。
  • 可靠性:Kafka 是分佈式且擁有 partition 與 replication,屬於高容錯性。

為什麼不用 Apache Kafka ?

  • 資料流較單純且簡單
  • 資料量少
  • 尋求較低維運成本的 message queue

Apache Kafka 架構

Photo by cloudkarafka

Apache Kafka 是一種可以設置主題 (Topic)、新增、處理和重複使用程序的 message queue。

Producer 連接到該系統並將信息傳輸到主題上。記錄可以任何類型的信息;例如,關於網站上任何使用者所產生的事件。Consumer 可以連接到系統並處理或重新消費來自主題的舊記錄,且可以替信息設置保留期限並留存直到過期為止。

Apache Kafka 中的四個主要元件:

  • Broker:處理來自生產者與消費者端的所有請求(生產、消費和 metadata)並在集群複將信息建立副本。集群中可以有一個或多個代理。
  • Zookeeper:協調集群中的各個元件,保持集群的健康狀態。
  • Producer:負責將信息發送給 Broker。
  • Consumer:消費來自 Topic 的批量紀錄。

Topic

主題是存儲和發布記錄的類別元件,它和 Queue 非常相似且作為存儲層不只接收也傳遞信息。

  • 分區:主題可以有一個或多個分區,我們需要在創建主題時指定分區數。你可以把主題想像成操作系統中的一個文件夾,它裡面的每個文件夾都是一個分區。
  • 循環接收消息:默認情況下,生產者將以循環方式發送消息,每個分區都會收到一條消息(即使它們是由同一個生產者發送的),因此我們無法保證分區的傳遞順序。
  • 偏移量:每條信息都將存儲在磁盤中,並且都會有 offset 作為消費記錄(唯一標識符)。每個分區都有自己的偏移量以便在日後必要時能夠恢復它們。與一般信息系統不同,信息不會在被消費後立即刪除。
Photo by javatpoint

Broker

如開頭所說,Kafka 之所以如此強大仰賴背後的分佈式集群,而一個完整集群可以包含多個 broker。

集群中的每個 Broker 都有一個 ID 識別,並且包含至少一個主題的一個分區。可以在創建主題時配置要配置每個 broker 中的分區數。以下圖來說假設我們的集群中有三個 Broker,一個主題具有三個分區,在這種情況下,每個 Broker 將負責該主題的一個分區。

Photo by codingharbour

為了保證集群的可靠性,Kafka 引入了 Partition Leader 的概念Broker 中的每個主題分區都有所謂的 Leader,且每個分區只能存在一個領導者。領導者是唯一接收信息的人,他們的 Follower (副本)只會同步數據。這將確保即使 Broker 出現故障,主題分區的信息還有副本存在不會因此丟失。

Photo by educba

Producers and Consumers

Photo by kafka

在信息傳遞的世界中,Kafka 中的 Producer 作為信息生產者將資料發送至主題。Consumer 則是信息的消費者將指定主題的資料接收並作處理。

Topic 則是 Producer 與 Consumer 溝通的橋樑。

Consumer Group

先前有提到 Kafka 適合大資料量的傳遞,所以資料的消費速度顯得非常重要,當我們需要擴展信息消費量時架構設計顯得非常重要。

當單個消費者需要從多個分區讀取時,它會顯得非常耗時且工作量繁忙,因此我們處理在消費者之間負載平衡,Consumer Group 此時派上用場。

每個消費群組中的消費者不會重複消費同一筆信息,不同消費群組間則可以消費同一筆信息,所以設置每個群組的消費者數量則是擴展負載平衡的關鍵。

理想是在一個群組中設置與主題中的分區數量相同的消費者,這樣每個消費者都會讀取到一個分區。如果消費者數量大於分區數量,部分消費者將不會讀取到主題的分區內容則會處於空閒狀態。

Photo by cloudera

What’s Next?

希望讀者可以透過此篇文章了解到 Apache Kafka 此工具是在做什麼,評估對個人或團隊的優劣,是否需要引進,架構出對團隊與公司有幫助的 data stack。下一篇文章將講解目前 Apache Kafka 在 KKday 資料工程團隊的即時串流應用、架構說明。

Reference

--

--