可視化 Kafka

Kafka 是開源事件流軟件,可允許您構建事件驅動系統。雖然有其他指南,但我希望專注於可視化 Kafka 背後的主要概念。這樣,當你閱讀其他指南時,你會感到更自信。

有那個,讓我們開始!

 基本

在我們開始之前,讓我們確保我們在關於 Kafka 的同一頁面上。它是事件流軟件。它允許後端服務(通常在微服務體系結構中)彼此通信。

Two services communicating via Kafka

 生產者和消費者

生產者和消費者是在 Kafka 中傾聽或發送消息的服務。這些服務是您的後端服務。

Consumer and Producer

服務可以是消費者和生產者。

A service listening to messages and consuming them

 主題 Topic

主題是生產者可以發送消息的地址。其他服務可以傾聽這些主題。

A service emitting a message and a service receiving a message from a Kafka topic

服務可以偵聽並將消息發送到儘可能多的主題。

還有一個消費者組的概念。這是一組充當單一消費者的服務。

A consumer group listening to topic B

對於任何用於消費者組的消息,Kafka 將該消息路由到單個服務。這有助於您加載平衡消息。和規模消費者!

A message going into a single service with a consumer group

一個主題充當郵件的隊列。讓我們走這一點。首先,發送消息。

Producer sending message to Kafka topic.

然後,將記錄並存儲在此隊列中的消息。此消息無法更改。

Message getting stored on the queue

該消息也被髮送給主題的任何消費者。但是,該消息永久且無法編輯隊列。

A copy of the message being stored on the queue and sent to consumer.

讓我們發送另一條消息。只是爲了回家。

Sending a second message to Topic A

就像以前一樣,此消息將被髮送到消費者並存儲在隊列中。您無法更改消息,它們將永久存儲。

(P.S. 如果有太多或經過一段時間),您可以配置 Kafka 主題以刪除這些消息)

Second message being stored.

這是我們的 Kafka 集羣中的每個主題

Messages being queued up in topics

這些不可變的隊列允許我們異步地存儲消息,無論生產者或消費者是否下降。它還保證了消息的正確性(它們是不可替代的)。

讓我們開闢這些 Kafka 主題,看看內部。

 分區

我撒了謊。一個 Kafka 主題不是一個隊列,而是實際組成了許多名爲 Partitions 的隊列!他們幫助一個主題規模。

A topic with two partitions

當一個生產者帖子到一個主題時,該消息被路由到單個分區。

A producer writing to a topic, which is writing to multiple partitions

您可以配置主題(不是服務)以將消息拆分爲不同的分區。例如,如果您正在處理用戶消息(並且具有用戶 ID),則可以確保該用戶留在同一分區內的消息。您可以通過散列用戶 ID 來執行此操作,然後通過分區的數量調製它。你明白了。我希望。

A producer sending messages (with possibly different entity/user ids) to different partitions

你爲什麼要這個?這是因爲分區中的每條消息都保證按時間順序排列。因此,按順序消耗。

Messages being consumed in order from partitions.

進入該分區的每條消息都在該分區中排序。即使有多個用戶(或其他實體)映射到相同的分區(紅色 / 綠色)。您仍然可以爲每個訂購用戶消息。

Regardless of why different message types are mapped into single partitions, they maintain order

將訂購來自分區的消息。但分區可以隨時發出消息。因此,主題,不要保證訂單。這有點奇怪。我知道。下面,請注意兩個分區如何發送自己的消息。但是,無論其他分區如何,他們都這樣做。他們仍然保持自己的信息訂單。

Two perfectly valid scenarios. Each partition maintains order for its own messages.

如果您的消費者依賴於消息訂單(跟蹤用戶點擊在您的站點中),則您將希望更多地查看這些主題分區策略(這是本文的範圍)。如果沒有,默認策略將爲您工作。

讓我們現在縮小一下並瞭解 Kafka 如何做到這一點。

 基礎設施

如果我們退後一步,讓我們看看我們的第一個圖表。什麼是 kafka 雲?

Two services communicating via Kafka

它實際上是一組服務器。我們將看到的第一個是 Kafka 羣集的頭部,Zookeeper。

Zookeeper routing traffic in and out of the Kafka cluster.

zookeeper 管理您的所有主題和分區。它基本上維護了一組 Kafka 羣集節點,其中存儲主題和分區。這些節點是構成 Kafka 集羣的單獨機器(例如,EC2 實例)。

Zookeeper maintaining a set of nodes

如果我們有兩個主題,每個主題都有兩個分區,這是我們之前可能以前可視化的。請注意,分區與現在的主題相同。

Two topics with two partitions

我們將編號分區以幫助稍後識別它們。

Numbered partitions

現在,讓我們看看這些主題如何適應我們的 Kafka 集羣。讓我們從一個主題開始。主題 A. 對於此示例,其分區#1 將放在每個節點上。

Topic A, Partition #1

您不必在每個節點上放置分區。你可能不想。它會變得昂貴。另一方面,您將擁有一個有彈性的系統。讓我們看看爲什麼。

如果消息進入,則會將其路由到其中一個節點中的分區,稱爲領導者。zookeeper 爲領導者分配。

A message sent to the leader.

Zookeeper 將像以前一樣將消息發送給消費者。它還將將消息複製到分區的其他副本。追隨者。

Sending the message to the consumer and duplicating it on all of the followers

現在,分區的每個副本都包含我們的消息!如果一個節點拆卸或爆炸,Zookeeper 將重新分配給不同的節點。

Message in each partition copy

這是與我們添加的彼此分區相同的過程。我們現在將在我們的羣集中保留兩個分區副本。

Two partition copies

現在讓我們在另一個分區#2 中添加主題 A. 它也只是兩個副本。現在,主題 A 完全在我們的集羣中!兩個分區都被複制和維護。

Partition #1 and #2 in our cluster.

現在,讓我們在主題 B 的分區中添加分區。我們現在假設兩個副本。這是我們的 Kafka 集羣與兩個主題!我們已經完成了!

Both clusters

它可能有助於比較我們以前擁有的東西。請注意,主題如何在羣集中傳播。

What we had before.

What we have now!

 結論

希望你現在對 Kafka 更好地瞭解。希望這些可視化能幫助您詢問哪些問題,以便詢問。本文中的每個原則上都有令人難以置信的指南。

(本文由聞數起舞翻譯自 123 Followers 的文章《Visualizing Kafka》,轉載請註明出處,原文鏈接:
https://timothystepro.medium.com/visualizing-kafka-20bc384803e7)

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ylsvunZ9x9ozz4G77P0j_Q