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 message entering a topic, going to a partition
消費者會聽取所有分區并消耗所有人的事件。
> A message being consumed from a partition
默認情況下的生產者將為主題發送消息。主題將確定消息將轉到哪些分區。默認情況下,將通過循環策略分配消息。
> 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更好地了解。我希望這些可視化能幫助您詢問哪些問題,以便詢問。本文中的每個原則上都有令人難以置信的指南。
謝謝你的閱讀!并且非常感謝Kafka創作者制作一個令人難以置信的平臺。
(本文由聞數起舞翻譯自123 Followers的文章《Visualizing Kafka》,轉載請注明出處,原文鏈接:
https://timothystepro.medium.com/visualizing-kafka-20bc384803e7)