Kafka是开源事件流软件,可允许您构建事件驱动系统。虽然有其他指南,但我希望专注于可视化Kafka背后的主要概念。这样,当你阅读其他指南时,你会感到更自信。
有那个,让我们开始!
在我们开始之前,让我们确保我们在关于Kafka的同一页面上。它是事件流软件。它允许后端服务(通常在微服务体系结构中)彼此通信。
> Two services communicating via Kafka
生产者和消费者是在Kafka中倾听或发送消息的服务。这些服务是您的后端服务。
> Consumer and Producer
服务可以是消费者和生产者。
> A service listening to messages and consuming them
主题是生产者可以发送消息的地址。其他服务可以倾听这些主题。
> 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)