用简单的英语解释消息队列和 Kafka
想要了解为什么 kafka 如此受欢迎并且招聘经理正在寻找具有这种技能的人吗?
好吧,我写这篇文章是为了帮助稍微阐明一下 kafka,但我也首先解释了消息队列的一般情况,以建立解释 Kafka 的基础。
什么是消息队列
消息队列的目的是帮助可靠地传递通信(或消息)。如果你在 Google 上搜索“什么是消息队列”,你会得到这样的答案:
消息队列提供异步通信协议,这意味着消息的发送者和接收者不需要同时与消息队列交互。
但我认为你可以更简单地解释一下。你可以把消息队列想象成一个邮政信箱。邮递员随时可能把消息投递到那里,并且可以一直把消息放在那里,直到你去取。它们可以累积起来,也可以立即被取回。
在这个例子中,邮递员是“发布者”或“生产者”,而当您去取邮件时,您是“订阅者”或“消费者”。
为什么要使用消息队列?
嗯,原因有很多,但基本上答案是现实世界的系统比简单的单一消费者、单一生产者的邮政系统要大得多,也复杂得多。
您可能有许多同一条消息的消费者,您可能必须处理容错问题(如果在处理消息时出现故障怎么办?)或者您可能希望能够跟踪消息的传递时间。
下图展示了一个允许上传照片的社交媒体应用内部的实际结构。用户上传照片后,除了消息队列之外,还会保存到数据库。多个消费者会使用此通知来获知用户上传了新照片,但最终照片会显示在你好友的“通知”中。
什么是 Kafka
那么,了解了消息队列的“是什么”和“为什么”的基本知识之后,那么 Kafka 是什么呢?
Kafka 的主要区别在于存储,它使用提交日志 (commit log)来保存数据。Kafka 将您发送给它的消息存储在主题 (Topic)中。消费者可以根据需要“重放”这些消息。通常在消息队列中,消息在订阅者确认收到后会被删除。
Kafka 的另一个不同之处在于主题是按添加日期排序的。并非所有消息队列都保证这一点。
存储消息的单个 Kafka 服务器被称为“Broker”。Broker 通常用于集群,这意味着许多服务器连接在一起以处理大量数据和流量。主题可以进一步细分为“分区”,并由各个 Broker 进行划分。
Kafka 可以轻松地让你在一组 Broker 之间划分发布和消费消息的工作。它如下所示:
Kafka 现在为什么这么火?
Kafka 最初由 LinkedIn 开发,用于处理大量流量并提供处理实时数据馈送的平台。
Kafka 的设计初衷是以事务性的方式存储数据。消费者组在读取某个主题时会跟踪自己的位置,这样多个消费者就可以从同一主题读取大量数据,同时将工作分摊到各个消费者之间。如果您愿意,可以从头开始读取任何现有主题,以获取所有已发送的消息。
关于 Kafka 的一些讨论
在评估某人使用 Kafka 的经验时,您可以询问几件事。
- 您的系统每秒处理多少笔交易?
- 您如何决定集群的大小?
- 为什么您决定选择 Kafka 而不是更简单的方案?
- 您可以询问有关主题数量、分区、消费者群体等的问题。
- 您在系统中实施 kafka 时遇到了哪些挑战?
一般来说,问“为什么”是了解一个人是否拥有决策权,或者他们是否真正理解自己做某事的原因的好方法。但问一些更具体的问题,例如规模以及实施过程中面临的挑战,也会很有帮助。
概括
消息队列是一种常见的架构,可能出现在许多类型应用程序的后端。几乎每个重要的应用程序或公司在构建软件时,一旦达到一定规模,都会在其基础设施的某个位置部署一个消息队列。
Kafka 因其能够无限期地存储数据消息并处理海量流量的能力而被许多大型组织所采用。Kafka 还有许多其他功能我没有涉及(例如流处理系统),但这些是基础知识,应该可以帮助您稍微了解人们使用它的原因以及它的用途。
注意:我最初在ITeach Recruiters 博客上发布了这篇文章,我正在那里为招聘人员创建课程,但我认为这篇文章足够通用,刚刚了解这些概念的新开发人员会感兴趣。
文章来源:https://dev.to/ard/message-queues-and-kafka-explained-in-plain-english-550g