何时使用 RabbitMQ 而不是 Kafka? [关闭]

2024-04-07

我被要求评估 RabbitMQ 而不是 Kafka,但发现很难找到消息队列比 Kafka 更合适的情况。有谁知道消息队列在吞吐量、耐用性、延迟或易用性方面更适合的用例?


RabbitMQ 是一个可靠的、通用的消息代理支持AMQP、MQTT、STOMP等多种协议,可以处理高吞吐量。 RabbitMQ 的一个常见用例是处理后台作业或长时间运行的任务,例如文件扫描 https://www.cloudamqp.com/blog/2019-01-18-softonic-userstory-rabbitmq-eventbased-communication.html、图像缩放或 PDF 转换。 RabbitMQ 还用于微服务之间,作为应用程序之间通信的手段,避免传递消息的瓶颈。

Kafka 是一种优化的消息总线高吞吐量摄取数据流并重播。当您需要移动大量数据、实时处理数据或分析一段时间内的数据时,请使用 Kafka。换句话说,需要收集、存储和处理数据的地方。一个例子是当您想要跟踪网上商店上的用户活动并生成建议的购买商品时。另一个例子是用于跟踪、摄取、记录或安全的数据分析。

卡夫卡可以看作是持久消息代理应用程序可以在其中处理和重新处理磁盘上的流数据。 Kafka 有一个非常简单的路由方法。如果您需要以复杂的方式将消息路由到消费者,RabbitMQ 有更好的选择。如果您需要支持可能离线的批量消费者或需要低延迟消息的消费者,请使用 Kafka。

为了了解如何从Kafka读取数据,我们首先需要了解它的消费者和消费者群体。分区允许您通过将数据拆分到多个节点来并行化主题。分区中的每条记录都通过其唯一的偏移量进行分配和标识。该偏移量指向分区中的记录。在最新版本的 Kafka 中,Kafka 为分区中的每条记录维护一个数字偏移量。 Kafka 中的消费者可以定期自动提交偏移量,也可以选择手动控制此提交位置。 RabbitMQ 将保留有关已消费/已确认/未确认消息的所有状态。我发现 Kafka 比 RabbitMQ 的情况更难理解,在 RabbitMQ 中,消息一旦被确认就会从队列中删除。

RabbitMQ 的队列在空时速度最快,而 Kafka 以很少的开销保留大量数据 - Kafka 专为保存和分发大量消息而设计。 (如果你打算在 RabbitMQ 中排很长的队列,你可以看看惰性队列 https://www.rabbitmq.com/lazy-queues.html.)

Kafka 是从头开始构建的,考虑到了水平扩展(通过添加更多机器进行扩展),而 RabbitMQ 主要是为垂直扩展(通过添加更多功能进行扩展)而设计的。

RabbitMQ 具有内置的用户友好界面,可让您从 Web 浏览器监控和处理 RabbitMQ 服务器。除此之外,还可以处理队列、连接、通道、交换、用户和用户权限 - 在浏览器中创建、删除和列出,您可以监控消息速率并手动发送/接收消息。卡夫卡有很多开源工具,还有一些商业工具 https://medium.com/@giorgosmyrianthous/overview-of-ui-monitoring-tools-for-apache-kafka-clusters-9ca516c165bd,提供管理和监控功能。我想说的是,更好地理解 RabbitMQ 会更容易/更快。

一般来说,如果您想要一个简单/传统的发布-订阅消息代理,那么显而易见的选择是 RabbitMQ,因为它的扩展能力很可能超出您需要的扩展能力。如果我的需求足够简单,可以通过通道/队列处理系统通信,并且不需要保留和流式传输,我会选择 RabbitMQ。

主要有两种情况我会选择RabbitMQ;对于长时间运行的任务,当我需要运行可靠的后台作业时。用于应用程序内部和应用程序之间的通信和集成,即作为微服务之间的中间人;其中系统只需要通知系统的另一部分开始执行任务,例如网上商店中的订单处理(下订单、更新订单状态、发送订单、付款等)。

一般来说,如果您想要一个用于存储、读取(重读)和分析流数据的框架,请使用 Apache Kafka。它非常适合经过审核的系统或需要永久存储消息的系统。这些也可以分为两个主要用例,用于分析数据(跟踪、摄取、日志记录、安全性等)或实时处理。

更多阅读、用例和一些比较数据可以在这里找到:https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html

另外推荐行业论文:《Kafka vs RabbitMQ:两种行业参考发布/订阅实现的比较研究》:http://dl.acm.org/itation.cfm?id=3093908 http://dl.acm.org/citation.cfm?id=3093908

我在一家提供 Apache Kafka 和 RabbitMQ 即服务的公司工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时使用 RabbitMQ 而不是 Kafka? [关闭] 的相关文章

  • 使用kafka lib反序列化PRIMITIVE AVRO KEY

    我目前无能力反序列化 avro PRIMITIVE 密钥在 KSTREAM 应用程序中 使用 avro 模式编码的密钥 在模式注册表中注册 当我使用 kafka avro console consumer 时 我可以看到密钥已正确反序列化
  • 在 docker-compose 文件中提供rabbitmq.conf会给出“sed:无法重命名/etc/rabbitmq/sedMaHqMa:设备或资源繁忙”

    我的 docker compose 看起来像这样 version 3 2 services mq hostname HOST NAME ports 5671 5671 5672 5672 15671 15671 15672 15672 en
  • KeeperErrorCode = /admin/preferred_replica_election 的 NoNode

    当我启动kafka时 zookeeper发生错误 INFO Got user level KeeperException when processing sessionid 0x156028651c00001 type delete cxi
  • 如何连接Kafka和Elasticsearch?

    我是Kafka的新手 我使用kafka通过logstash收集netflow 可以 并且我想将数据从kafka发送到elasticsearch 但是存在一些问题 我的问题是如何将 Kafka 与 Elasticsearch 连接起来 net
  • 无法向 Kafka 发送大消息

    我想从生产者向 Kafka 发送一条大消息 因此我更改了以下属性 代理 服务器 属性 replica fetch max bytes 317344026 message max bytes 317344026 max message byt
  • Linux 消息队列 - 多个接收者

    我最近一直在研究和研究 Linux 消息队列 并遇到了一些我不太明白为什么会发生的事情 如果我们运行两个程序 它们都在无限 for 循环中使用 msgrcv 来检查消息 然后发送两条消息 那么第一个运行的程序将收到第一条消息 第二个程序将收
  • Kafka的消息键有什么特别的地方吗?

    我没有看到任何提及消息键 org apache kafka clients producer ProducerRecord key 除了它们可以用于主题分区 我可以自由地将我喜欢的任何数据放入密钥中 还是有一些我应该遵守的特殊语义 该密钥似
  • 如何处理Kafka流中的不同时区?

    因此 我正在评估 Kafka Streams 及其功能 看看它是否适合我的用例 因为我需要每 15 分钟 每小时 每天聚合传感器数据 并发现它由于其窗口功能而很有用 因为我可以通过应用创建窗口windowedBy on KGroupedSt
  • Kafka中如何使用事务以及如何使用abortTransaction?

    我是 kafka 新手 我使用 Kafka Producer Java api 面对Kafka的这个问题 Kafka Invalid transition attempted from state COMMITTING TRANSACTIO
  • Grafana/prometheus 中没有 kafka 指标

    我成功部署了 Helm Chart普罗米修斯操作员 https github com coreos prometheus operator tree master helm prometheus operator kube 普罗米修斯 ht
  • 无法初始化类 io.confluence.kafka.schemaregistry.client.rest.RestService

    我正在尝试使用 KafkaAvroSerialzer 设置一个卡夫卡生产者以获得价值 当 rit 尝试创建生产者时 我遇到了这个错误 我正在使用 confluence 5 2 1 中提供的所有罐子 java lang NoClassDefF
  • Kafka Java 消费者从未收到任何消息

    我正在尝试设置一个基本的 Java 消费者来接收来自 Kafka 主题的消息 我已经跟踪了样本 https cwiki apache org confluence display KAFKA Consumer Group Example h
  • 我们如何读取给定时间范围内的Kafka主题?

    我需要读取 Kafka 主题中给定时间范围内的消息 我能想到的解决方案是首先找出时间范围开始的最大偏移量 然后继续消费消息 直到所有分区上的偏移量超过时间范围的末尾 有没有更好的方法来解决这个问题 谢谢 好吧 您肯定必须首先搜索适合时间范围
  • Azure 服务总线中的死信队列中的消息是否会过期?

    Azure 服务总线中的死信队列中的消息是否会过期 一些解释 我有这些队列设置 var queueDescription new QueueDescription MyTestQueue RequiresSession false Defa
  • RabbitMQ 管理插件窗口呈现为空白页面

    I have installed Erlang RabbitMQ and configured the management plugin as per the instructions on the website https www r
  • 我可以限制kafka-node消费者的消费吗?

    这看起来像我的 kafka 节点消费者 var kafka require kafka node var consumer new Consumer client 在某些情况下 获取的消息数量超出了我的处理能力 有没有办法限制它 例如每秒接
  • 如何更改主题的起始偏移量?

    是否可以更改新主题的起始偏移量 我想创建一个新主题并从偏移量开始阅读10000 How 自从卡夫卡0 11 0 0 https issues apache org jira browse KAFKA 4743你可以使用脚本kafka con
  • Kafka Streams 内部数据管理

    在我的公司 我们广泛使用 Kafka 但出于容错的原因 我们一直使用关系数据库来存储多个中间转换和聚合的结果 现在我们正在探索 Kafka Streams 作为一种更自然的方式来做到这一点 通常 我们的需求非常简单 其中一个例子是 监听输入
  • 命名 kafka 主题的最佳实践是什么?

    我们是 kafka 的新手 我们有几个团队正在开发一些相互发布 订阅事件的应用程序 由于kafka主题名称将在团队之间共享 那么命名有什么最佳实践吗 基本上我们不希望看到 A 团队命名主题companyname appname events
  • 从副本消费

    Kafka 将主题的每个分区复制到指定的复制因子 据我所知 所有写入和读取请求都会路由到分区的领导者 有没有办法从追随者那里消费而不是从领导者那里消费 Kafka中的复制只是为了故障转移吗 在 Kafka 2 3 及更早版本中 您只能从领导

随机推荐

  • Vuetify - 如何设置背景颜色

    我正在使用带有 Light 主题的 Vuetify 默认情况下 这会将主要内容的背景设置为浅灰色 我需要它是白色的 我想通过修改手写笔变量来覆盖它 但我似乎无法弄清楚哪个变量设置背景颜色 我按照中的所有步骤进行了操作docs https v
  • 如何使用 C# 语言将用户与机器人的对话数据存储到 azure SQL 数据库中?

    我目前正在研究 Bot 框架技术 在我当前的项目中 我想将 bot 对话数据存储到 azure SQL 数据库中 我开发了一个 ReviewBot 在其中我必须编写代码来按用户对任何酒店进行评论 评级 机器人与用户的通信工作正常 但我想使用
  • 使用 setInterval 时,如果我在 Chrome 中切换选项卡并返回,滑块会疯狂追赶

    我的网站上有一个 jQuery 滑块 转到下一张幻灯片的代码位于名为 nextImage 的函数中 我使用 setInterval 在计时器上运行我的函数 它完全符合我的要求 它在计时器上运行我的幻灯片 但是 如果我在 Chrome 中访问
  • 如何将 JavaScript 代码嵌入到 Google 协作平台页面中?

    我有一个 Google 协作平台页面 如何在其中嵌入 JavaScript 代码 而不实现小工具并在其中添加 JavaScript 代码 您可以运行一些 JavaScript 代码 但是在页面编辑期间 它将自动包装到一个简单的小工具中 并且
  • 阻止 Rails 表单标签修改文本

    我的一个视图中有下面的代码 但它始终呈现为主页 url 我怎样才能阻止它改变情况 br br 愚蠢 我知道 但这样就可以了 f label 之后的第一个参数实际上应该是正在编辑的对象的方法 所以您可能弄错了 我假设方法 字段名称 实际上是我
  • 通过拼凑对齐多个图例

    In 这个小插曲 https patchwork data imaginist com articles guides layout html controlling guides of 拼凑而成 https cran r project
  • 将 Json 响应解释为纯文本 [重复]

    这个问题在这里已经有答案了 我有以下代码 我需要解析响应 根据我的理解 该响应实际上保存在变量 transferFlag 中 但是 transferFlag 会提醒整个ajax代码 我需要 ajax 调用的响应 它实际上返回方法的值 get
  • 警告:找不到指定操作的配置:

    我遇到以下异常 请帮助解决这个问题 Jul 16 2013 11 18 40 AM org apache struts2 components Form evaluateExtraParamsServletRequest WARNING N
  • 如何将更新部署到在客户站点上运行的服务工作人员?

    假设我提供不同网站使用的推送通知服务 此服务需要在我的客户站点上安装 Service Worker 我希望该架构具有一些属性 完全静态资源 安装 Service Worker 文件 配置 JS 片段等过程只需完成一次 随时更新 Servic
  • 在通知区域切换中收听“深色主题”并收到更改通知

    我可以得到UI MODE NIGHT MASK通过致电resources configuration uiMode and Configuration UI MODE NIGHT MASK 我需要监听这个变量并在接收新值时更改我的主题 我想
  • uwsgi 选项 --wsgi-file 和 --module 无法识别

    我正在尝试使用 uwsgi 运行 Django 应用程序 我发现的大多数指令都引用 wsgi file 和 module 来指定应用程序 但 uwsgi 没有提及这些选项 当我尝试使用它们时 uwsgi s tmp uwsgi sock m
  • 在 Eclipse 的 Crashlytics 安装中找不到存储库

    我尝试将 Crashlytics SDK 安装到 Eclipse 中 但收到以下错误 安装软件 遇到问题 收集要安装的项目时发生错误 An error occurred while collecting items to be instal
  • 使用 JCo 从 SAP 系统读取表

    我试图从 SAP 系统读取表 但总是收到此错误 Exception in thread main com sap conn jco JCoRuntimeException 127 JCO ERROR FIELD NOT FOUND Fiel
  • 以与轴的纵横比一致的物理单位重新缩放箭袋箭头

    过去几个小时我一直在尝试定制matplotlib quiver没有太多运气 该文档非常混乱 我无法解析如何设置每个参数 在我的坐标轴中 一个垂直像素的物理距离比一个水平像素的物理距离小得多 并且我希望 quiver 将箭头自动缩放到此纵横比
  • 从逻辑角度来看,JavaScript 执行上下文和 JavaScript 对象是同一件事吗?

    我对 JavaScript 的理解是 在脚本执行时会创建一个全局执行上下文 我理解为保留内存空间中的一系列键 值对 很像常规的 JavaScript 对象 在函数执行时 将创建一个新的执行上下文 并可以访问 父 执行上下文 对我来说 这至少
  • 比较两个日期列并验证日期是否早于日期

    我有两列日期 月 日 年 我需要验证 DateColumn A 是否出现在 DateColumn B 之前 我使用了以下代码 但收到此错误 TypeError 必须是字符串 而不是系列 请帮助初学者 Code Column A dateti
  • 如何禁用从/到 EditText 的复制/粘贴

    在我的应用程序中 有一个注册屏幕 我不希望用户能够将文本复制 粘贴到EditText场地 我已经设置了一个onLongClickListener在各个EditText这样显示复制 粘贴 输入法和其他选项的上下文菜单就不会显示 因此用户将无法
  • 捕获视频而不预览

    我想捕获视频而不显示预览 这里的 android 文档说这是可能的 但没有解释如何 http developer android com guide topics media camera html capture video http d
  • 通过账户管理器添加账户

    我是 Android 开发新手 很抱歉 如果我问一个非常明显的问题 对于我的应用程序 我想使用帐户管理器自动添加一个谷歌帐户 我想使用 addAccount 或 addAccountExplicitly 吗 假设帐户名是 platinum
  • 何时使用 RabbitMQ 而不是 Kafka? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我被要求评估 RabbitMQ 而不是 Kafka 但发现很难找到消息队列比 Kafka 更合适的情况 有谁知道消息队列在吞吐量 耐用性 延迟或