iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
Software Development

從零開始構建能理解語義的 Linebot 架構系列 第 11

Kafka 概念介紹及部署: 主要角色及基本觀念

  • 分享至 

  • xImage
  •  

概述

  • Kafka是由三個主要角色組成的分散式事件流平台: Producer(生產者), Consumer(消費者), 以及Broker(中介)。
  • 根據不同的需求,妳可以用Kafka來處理訊息佇列,大量資料的傳遞,甚至新舊系統的介接。

Kafka 介紹

  • Kafka是一個分散式的平台,專門用來產生,傳遞,及訂閱事件(Event)。
  • 在Kafka中,所有的資料交換都是事件。這些事件可能由任何連接Kafka的子系統或微服務產生。
  • 不僅是事件的生產者,除了產生事件以外,任何連接Kafka的服務也可以根據需要,訂閱自己感興趣的事件。

Topic

  • 如果把事件比喻成檔案,那Topic就是分門別類存放這些檔案的目錄。Topic是一種類似Log的檔案系統,是存放不同種類的事件的地方,
  • 不同於傳統的佇列(Queue),Topic中的事件是持久保存的(Durable),除非你設定了清除條件,否則這些事件不會被消失。

主要角色

  • 在Kafka中的角色很簡單,只有三種: Producer, Consumer, 以及Broker
  • 即便是與 Kafka 本身無關的擴展應用(例如 Kafka Connect),也是基於Producer(Source Connector)和Consumer(Sink Connector)這兩個角色來運作的。

Broker

  • Broker扮演居中協調的角色,通常就是我們看到的"伺服器端"。
  • 每個Broker中會有一或多個Topic,而每個 Topic 又可以分成多個 Partition,用來儲存事件。

Producer / Consumer

  • Producer負責創造並傳送事件給Broker中的Topic;而Consumer則是事件的接收者,從Broker上的Topic中拉取(Pull) 事件。
  • 相同Event ID的事件會被送到同一個Partition,這寫確保了Consumer依照正確的寫入順序消費事件。

Kafka Cluster

  • 一個Kafka叢集(Cluster)由一個或多個角色組成。
  • 無論是Kafka程式本身,或任何和Kafka連結的服務,都可以扮演上述的任何一個角色。而一個完整的Kafka Cluster就是一個包含了這些角色的集群。

事件(Event)

  • 在Kafka宇宙中,所有資料都是Event, 代表著某個事件的發生。
  • 事件包含了Event key, Event value, Event timestamp, 及一些其他元數據(meta data)
  • 例如一筆交易事件如下:
Event key: "Alice"
Event value: "Made a payment of $200 to Bob"
Event timestamp: "Jun. 25, 2020 at 2:06 p.m."

Kafka的高可擴展性

Kafka 的高可擴展性(High Scalability)來自於 Producer 和 Consumer 之間的鬆耦合設計。
Producer只負責丟事件出去,不會管誰會接收;而Consumer則根據自己的需要隨時去拉取事件。彼此不會知道對方的存在,Producers也無需等待任何Consumers回應。
這樣的設計,讓系統能夠輕鬆地進行水平擴展。

以上,就是Kafka的基本觀念及角色。下一篇文章,我們會進一步深入探討這些角色的運作原理以及設定方式。

Confluent官網資源

有關Kafka的說明,官方有一些資源個人覺得做得蠻用心也蠻詳盡的,無論是剛上手或需要進階的use case,都推薦大家參考:

Kafka 101系列教學影片

個人覺得比多數的教學文章都更快上手,尤其是說明事件如何正確的被傳遞到Topic, Partition的部分
https://youtube.com/watch?v=J6adhl3wEj4&feature=shares

Confluent官網blog

這邊也有一些文章可看, 例如有一篇在講他們拿掉zookeeper的過程也寫在這
https://www.confluent.io/blog/

Event-drive, Event-stream, 以及一些最佳實踐

https://www.confluent.io/blog/designing-events-and-event-streams-introduction-and-best-practices/

Citation

https://kafka.apache.org/intro
https://www.confluent.io/wp-content/uploads/confluent-kafka-definitive-guide-complete.pdf


上一篇
使用 AWS Lambda 開發 Serverless Event 接收器: Node.js LINE Bot Handler
下一篇
Kafka 概念介紹及部署: Topic 及 Producer
系列文
從零開始構建能理解語義的 Linebot 架構12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言