Kafka与RabbitMQ:最大的区别是什么,你应该学习哪个?
目录
我们工作和生活在一个越来越依赖数据来完成事情的时代。应用程序、服务、软件、移动设备和其他元素结合在一起,形成了一个错综复杂、影响深远的网络,触及并影响到我们生活的大部分领域。
因此,越来越需要处理这些不同元素之间的信息流。设备和应用程序需要相互交谈,而且没有出错的余地。这就是为什么程序员使用消息经纪人和类似的工具来交换信息和相互沟通。
消息代理和发布/订阅(Pub/Sub)信息传递系统之间有什么区别?
消息代理是让应用程序、服务和系统通信和交换信息的软件模块。消息代理通过在正式的消息协议之间翻译消息,使相互依赖的服务能够直接 "对话",即使它们是用不同的语言编写的或在其他平台上运行。
消息代理机构验证、路由、存储并将消息传递给指定的接收者。经纪人作为其他应用程序之间的中间人运作,让发送者发布消息,而不知道消费者的位置,他们是否活跃,甚至不知道他们有多少人存在。
然而,发布/订阅是一种消息分发模式,让生产者发布他们想要的每一条消息。
数据工程师和科学家将pub/sub称为广播式的分发方法,其特点是在发布者和消费者之间有一对多的关系。
同时阅读:如何成为一名数据工程师?
什么是Kafka?
Kafka是一个开源的分布式事件流平台,促进原始吞吐量。Kafka用Java和Scala编写,是一个面向流和高压力数据回放的pub/sub消息总线。Kafka不依赖消息队列,而是将消息附加到日志中,并将其留在那里,直到消费者读取或达到其保留限制。
Kafka采用了一种 "基于拉动 "的方法,让用户从特定的偏移量中请求消息批处理。用户可以利用消息批处理来提高吞吐量和有效的消息传递。
虽然Kafka只提供了一个Java客户端,但它提供了一个适配器SDK,允许程序员建立自己独特的系统集成。此外,还有越来越多的社区生态系统项目和开源客户端的目录。
Kafka是在2011年发布的,所以它是新来者。你可以在这里找到对Kafka更详细的介绍。你也可以通过这个Kafka教程了解如何使用它,并在这里看看这个pub/sub模型的架构。
什么是RabbitMQ?
RabbitMQ是一个开源的分布式消息代理,有利于在复杂的路由场景中进行有效的消息传递。它之所以被称为 "分布式",是因为 RabbitMQ 通常作为一个节点集群运行,其中队列分布在各节点上 - 为实现高可用性和容错而进行复制。
RabbitMQ 采用了推送模型,并通过消费者配置的预取限制来防止用户不堪重负。该模型是低延迟消息传递的理想方法。它还可与 RabbitMQ 基于队列的架构很好地配合。将 RabbitMQ 视为邮局,它接收、存储和交付邮件,而 RabbitMQ 接受、存储和传输二进制数据消息。
RabbitMQ 原生实现了 AMQP 0.9.1,并使用插件来提供其他协议,如 AMQP 1.0、HTTP、STOMP 和 MQTT。RabbitMQ 正式支持 Elixir、Go、Java、JavaScript、.NET、PHP、Python、Ruby、Objective-C、Spring 和 Swift。它还支持使用社区插件的各种开发工具和客户端。
Kafka的用途是什么?
Kafka最适合用于从A到B的流式传输,不需要借助复杂的路由,但可以获得最大的吞吐量。它也是事件源、流处理以及将系统的建模变化作为事件序列进行的理想选择。Kafka也适用于处理多阶段管道中的数据。
一句话,如果你需要一个框架来存储、阅读、重读和分析流式数据,就使用Kafka。它是常规审计系统或永久存储其消息的理想选择。再进一步细分,Kafka在实时处理和分析数据方面大放异彩。
RabbitMQ的用途是什么?
开发人员使用 RabbitMQ 来处理高吞吐量和可靠的后台作业,以及应用程序之间和内部的集成和互通。程序员还使用 RabbitMQ 向消费者执行复杂的路由,并使用非简单的路由逻辑集成多个应用程序和服务。
RabbitMQ 是需要快速请求-响应的 Web 服务器的完美选择。它还可以在高负载(20K+ 消息/秒)下的工作者之间分担负载。RabbitMQ 还可以处理后台工作或长期运行的任务,如 PDF 转换、文件扫描或图像缩放。
总而言之,使用RabbitMQ可以处理长期运行的任务,可靠地运行后台作业,以及应用程序之间和内部的通信/集成。
了解 RabbitMQ 与 Kafka 之间的差异
这些消息传递框架从完全不同的角度处理消息传递,它们的能力也大不相同。对于初学者来说,这个图表分解了一些最重要的差异。
Kafka 与 RabbitMQ | RabbitMQ | Kafka |
性能 | 每秒4K-10K消息 | 每秒100万条消息 |
消息保留 | 基于确认的 | 基于政策的(例如,30天) |
数据类型 | 交易性的 | 操作性 |
消费者模式 | 聪明的经纪人/愚蠢的消费者 | 哑巴经纪人/聪明的消费者 |
拓扑结构 | 交换类型。直接, 扇出, 主题, 基于头的 | 基于发布/订阅 |
有效载荷大小 | 无限制 | 默认1MB限制 |
使用案例 | 简单的使用案例 | 海量数据/高吞吐量案例 |
更多关于Kafka与RabbitMQ之间的首要区别。
-
数据流
RabbitMQ使用一个独特的、有边界的数据流。消息由生产者创建和发送,由消费者接收。Apache Kafka 使用无界数据流,键值对不断流向指定主题。
-
数据使用
RabbitMQ最适合处理事务性数据,如订单的形成和放置,以及用户请求。Kafka最适合处理运营数据,如流程操作、审计和日志统计以及系统活动。
-
消息传递
RabbitMQ向用户发送消息。这些消息一旦被处理和确认就会从队列中删除。Kafka是一个日志。它使用连续的消息,这些消息留在队列中直到保留时间过期。
-
设计模型
RabbitMQ采用了智能经纪人/傻瓜消费者模型。代理人持续地将消息传递给消费者,并跟踪它们的状态。Kafka采用的是哑巴经纪人/智能消费者模型。Kafka并不监控每个用户阅读过的消息。相反,它只保留未读的消息,在设定的时间内保留所有的消息。消费者必须监控他们在每个日志中的位置。
-
拓扑结构
RabbitMQ使用交换队列拓扑结构--将消息发送到一个交换中心,在那里它们又被路由到各种队列绑定供消费者使用。Kafka采用了发布/订阅拓扑结构,将消息跨流发送到正确的主题,然后由不同授权组的用户消费。
你应该在2021年学习哪一个--Kafka vs RabbitMQ?
虽然这听起来像个借口,但答案是--这取决于你的需求是什么。如果你的操作需要以下任何一种用例,请学习并使用Apache Kafka。
- 事件源或系统建模变化为一连串的事件
- 在多阶段的管道中流化和处理数据
- 需要流的历史,以 "至少一次 "的分区顺序交付的应用程序
- 具有至少 110K/秒事件吞吐量、复杂路由或 "至少一次 "分区排序的流
而且,如果这些用例中的任何一个适用于您的组织,您应该学习和使用 RabbitMQ。
- 在每个消息的基础上对一致性/保证集进行细粒度控制
- 到用户/消费者的复杂路由
- 需要各种发布/订阅或点对点请求/回复消息传递功能的应用程序
- 必须支持传统协议的应用,如STOMP、MQTT、AMQP、0-9-1。
如果你不确定你的职业将走向何方,你可以考虑同时学习。这种策略可以提高你的技能,增强你在新的工作环境中的灵活性,并增加你对未来潜在雇主的营销能力。在时间和资源允许的情况下,考虑同时获得RabbitMQ和Kafka的认证,并做好一切准备。
当你准备参加Apache Kafka认证考试时,先看看这些 Kafka练习题,然后你可以查看Kafka面试题,为求职面试做准备。
寻找数据工程师的职业机会?
数据科学家和数据工程师的技能是 2021年最需要的技能之一。 如果你对数据工程职业感兴趣,Simplilearn提供的 数据工程课程可以为你在正确的方向上提供助力。这个数据工程研究生课程侧重于使用Hadoop框架的分布式处理,使用Spark的大规模数据处理,使用Kafka的数据管道,以及在AWS和Azure云基础设施上处理数据。一旦你完成这个数据工程认证课程,你将为数据工程角色做好职业准备。
一旦你获得数据工程认证,可以考虑Simplilearn的 Kafka认证培训课程。这个课程教你如何掌握架构、安装、配置和Kafka开源消息传递接口。你将学习作为集中式服务的Apache ZooKeeper的基础知识,并培养部署Kafka进行实时消息传递的技能。
根据Payscale.com,数据工程师的年平均收入为92,325美元,上限范围约为132,000美元。