可视化Kafka

2021-05-11 11:14:49 浏览数 (1)

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更好地了解。希望这些可视化能帮助您询问哪些问题,以便询问。本文中的每个原则上都有令人难以置信的指南。

(本文由闻数起舞翻译自123 Followers的文章《Visualizing Kafka》,转载请注明出处,原文链接: https://timothystepro.medium.com/visualizing-kafka-20bc384803e7)

来源:

https://www.toutiao.com/i6956631034708378115/

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

0 人点赞