Kafka 是主流的訊息流系統,其中的概念還是比較多的,下面通過圖示的方式來梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個清晰的認識,
基礎
Kafka 是一套流處理系統,可以讓后端服務輕松的相互溝通,是微服務架構中常用的組件,

生產者消費者
生產者服務 Producer 向 Kafka 發送訊息,消費者服務 Consumer 監聽 Kafka 接收訊息,

一個服務可以同時為生產者和消費者,

Topics 主題
Topic 是生產者發送訊息的目標地址,是消費者的監聽目標,

一個服務可以監聽、發送多個 Topics,

Kafka 中有一個【consumer-group(消費者組)】的概念,
這是一組服務,扮演一個消費者,

如果是消費者組接收訊息,Kafka 會把一條訊息路由到組中的某一個服務,

這樣有助于訊息的負載均衡,也方便擴展消費者,
Topic 扮演一個訊息的佇列,
首先,一條訊息發送了,

然后,這條訊息被記錄和存盤在這個佇列中,不允許被修改,

接下來,訊息會被發送給此 Topic 的消費者,
但是,這條訊息并不會被洗掉,會繼續保留在佇列中,

繼續發送訊息,

像之前一樣,這條訊息會發送給消費者、不允許被改動、一直呆在佇列中,
(訊息在佇列中能呆多久,可以修改 Kafka 的配置)


Partitions 磁區
上面 Topic 的描述中,把 Topic 看做了一個佇列,實際上,一個 Topic 是由多個佇列組成的,被稱為【Partition(磁區)】,
這樣可以便于 Topic 的擴展,

生產者發送訊息的時候,這條訊息會被路由到此 Topic 中的某一個 Partition,

消費者監聽的是所有磁區,

生產者發送訊息時,默認是面向 Topic 的,由 Topic 決定放在哪個 Partition,默認使用輪詢策略,

也可以配置 Topic,讓同型別的訊息都在同一個 Partition,
例如,處理用戶訊息,可以讓某一個用戶所有訊息都在一個 Partition,
例如,用戶1發送了3條訊息:A、B、C,默認情況下,這3條訊息是在不同的 Partition 中(如 P1、P2、P3),
在配置之后,可以確保用戶1的所有訊息都發到同一個磁區中(如 P1),

這個功能有什么用呢?
這是為了提供訊息的【有序性】,
訊息在不同的 Partition 是不能保證有序的,只有一個 Partition 內的訊息是有序的,


架構
Kafka 是集群架構的,ZooKeeper是重要組件,

ZooKeeper 管理者所有的 Topic 和 Partition,
Topic 和 Partition 存盤在 Node 物理節點中,ZooKeeper負責維護這些 Node,

例如,有2個 Topic,各自有2個 Partition,

這是邏輯上的形式,但在 Kafka 集群中的實際存盤可能是這樣的:

Topic A 的 Partition #1 有3份,分布在各個 Node 上,
這樣可以增加 Kafka 的可靠性和系統彈性,
3個 Partition #1 中,ZooKeeper 會指定一個 Leader,負責接收生產者發來的訊息,

其他2個 Partition #1 會作為 Follower,Leader 接收到的訊息會復制給 Follower,

這樣,每個 Partition 都含有了全量訊息資料,

即使某個 Node 節點出現了故障,也不用擔心訊息的損壞,
Topic A 和 Topic B 的所有 Partition 分布可能就是這樣的:

感謝閱讀,希望對你有所幫助 ??
翻譯整理自:https://timothystepro.medium.com/visualizing-kafka-20bc384803e7
譯文:https://blog.csdn.net/duysh/article/details/116355977
近期熱文推薦:
1.600+ 道 Java面試題及答案整理(2021最新版)
2.終于靠開源專案弄到 IntelliJ IDEA 激活碼了,真香!
3.阿里 Mock 工具正式開源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式發布,全新顛覆性版本!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285549.html
標籤:Java
上一篇:面阿里P7,竟問這么簡單的題目?
下一篇:gateway 報錯 allowedOrigins cannot contain the special value "*"
