"图解"kafka

Kafka是一款开源的事件流软件,它可以帮助你构建基于事件驱动的系统。虽然有其他的学习指南,但是我更关注的是将Kafka背后的主要概念图形化。这样,当你阅读其他指南时,你会感到更自信。

Basics

在我们开始之前,让我们确保我们在关于Kafka的看法是一致的。 它是一款事件流软件。 它让后端服务(通常在微服务体系结构中)彼此通信。

图片.png

生产者和消费者

生产者和消费者是在Kafka中监听或发送消息的服务。这些服务是您的后端服务。


图片.png

一个服务可以是生产者又可以是消费者。

图片.png

主题(topic)

主题是生产者可以向其发送消息的地址。其他服务可以监听这些主题。


图片.png

一个服务可以监听消息并发送消息到它想要的任意多个主题。


图片.png

还有一个消费者组的概念。这是一组充当单一消费者的服务。


图片.png

主题可以充当消息的队列。让我们来看看这个。首先,发送一条消息。


Producer sending message to Kafka topic..png

然后,该消息被记录并存储在该队列中。此消息无法被修改的。


Message getting stored on the queue.png

该消息也被发送给监听该主题的消费者。 但是,但是,该消息将永久保存在队列中,不能进行修改。

图片.png

让我们发送另一个消息。只是为了再次强调一下。


发送第二条消息到Topic A.png

与前面一样,该消息将被发送到消费者并存储在队列中。您不能更改消息,它们将被永久存储。


图片.png

这是我们的Kafka集群中的每个主题。
图片.png

这些不可变队列允许我们异步存储消息,而不管生产者或消费者是否出现故障。它还保证消息的正确性(它们没有被篡改)。

让我们剖开Kafka主题,看看内部。

分区(Partitions)

我说谎了。一个Kafka主题并不是一个真正的队列,而是由许多称为分区的队列组成的!


图片.png

当生产者向主题发布消息时,该消息将被路由到单个分区。


图片.png

消费者监听所有分区并接收所有分区的事件。


图片.png

默认情况下,生产者将向主题发送消息。主题将确定消息将转到哪个分区。默认情况下,消息将通过轮询策略分配给分区。
图片.png

您可以配置主题(而不是服务)来将消息分割到不同的分区。例如,如果您正在处理用户消息(并且有一个用户id),那么您可以确保同一用户的消息分配到同一个分区内。您可以通过对用户id进行hash计算,然后根据分区数对其进行计算(如:hash值/分区数 )。你明白了吧。


图片.png

这样搞的好处是什么呢?好处在于分区中的每条消息都保证按时间顺序排列,因此可以按顺序消费。


图片.png

进入该分区的每条消息都在该分区中排序。 即使有多个用户(或其他实体)映射到相同的分区(红色/绿色)。 您仍然可以为每个订购用户消息。


图片.png

来自分区的消息将被排序。但是分区可以在任何时候发送它们的消息。因此,主题是不保证顺序。这有点奇怪。我知道。下面,请注意两个分区是如何发送它们自己的消息的。但它们是不考虑其他分区的。他们仍然保持自己的消息顺序。


图片.png

如果您的消费者依赖于消息顺序(跟踪站点内的用户单击),那么您将希望深入研究这些主题分区策略(这超出了本文的讨论范围)。如果没有这种需求,你可以使用默认策略。

现在让我们再深入一点,了解一下Kafka是如何做到这一点的。

基础架构(Infrastructure)

如果我们退一步来看第一张图表。什么是Kafka云。


图片.png

它实际上是一组服务器。 我们将看到的第一个是Kafka群集的头部zookeeper。

图片.png

Zookeeper管理所有的主题和分区。它基维护了一组Kafka集群节点,在这些节点上存储主题和分区。这些节点是组成Kafka集群的独立机器(例如,EC2实例)。

图片.png

如果我们有两个主题,每个主题有两个分区,这可能是我们之前想象它们的方式。注意,现在分区的颜色与主题相同。


图片.png

我们将给分区编号,以便稍后识别它们。


图片.png

现在,让我们看看这些主题如何适应我们的Kafka集群。 让我们从一个主题开始。 主题A.对于此示例,其分区#1将放在每个节点上。
图片.png

您不必在每个节点上放置分区。 因为 它会变得昂贵。 另一方面,您将拥有一个有弹性的系统。 让我们看看为什么。

如果有消息进来,则会将其路由到其中一个节点中的分区,称为领导者。 zookeeper为领导者分配。


图片.png

Zookeeper将像以前一样将消息发送给消费者。 它还将将消息复制到分区的其他副本,从节点。


图片.png

现在,分区的每个副本都包含我们的消息! 如果一个节点拆卸或爆炸,Zookeeper将重新分配给不同的节点。


图片.png

这是与我们添加的彼此分区相同的过程。我们现在将在我们的群集中保留两个分区副本。
图片.png

现在让我们在另一个分区#2中添加主题A.它也只是两个副本。 现在,主题A完全在我们的集群中! 两个分区都被复制和维护。


图片.png

现在,让我们在主题B的分区中添加分区。我们现在假设两个副本。 这是我们的Kafka集群与两个主题! 我们已经完成了!


图片.png

比较一下我们以前的情况可能会有所帮助。注意主题是如何在集群中分布的。


图片.png

图片.png

结束语

我希望你现在对Kafka更好地了解。 我希望这些图形化的东西能帮助你弄清楚你在google中要搜索的问题。

谢谢你的阅读! 并且非常感谢Kafka创作者制作一个令人难以置信的平台。

原文:https://timothystepro.medium.com/visualizing-kafka-20bc384803e7

你可能感兴趣的:("图解"kafka)