如何选择消息队列?Kafka 与 RabbitMQ

在上一期中,我们讨论了使用消息队列的好处。然后,我们回顾了消息队列产品的历史。现在看来,当我们需要在项目中使用消息队列时,Kafka 是首选产品。但是,当我们考虑特定要求时,它并不总是最佳选择。

数据库支持的队列

让我们再次使用我们的星巴克示例。最重要的两个要求是:

  • 异步处理,因此收银员无需等待即可接受下一个订单。

  • 坚持不懈,以便在出现问题时不会错过客户的订单。

消息订购在这里并不重要,因为咖啡机经常制作成批的相同饮料。可扩展性也不那么重要,因为队列仅限于每个星巴克门店。

星巴克队列可以在数据库表中实现。下图显示了它是如何工作的:

当收银员接受订单时,将在数据库支持的队列中创建一个新订单。然后,收银员可以接受另一个订单,而咖啡机则分批接取新订单。订单完成后,咖啡机会在数据库中将其标记为完成。然后,顾客在柜台领取咖啡。

内务管理作业可以在每天结束时运行,以删除已完成的订单(即那些状态为“完成”的订单)。

对于星巴克的用例,一个简单的数据库队列就可以满足要求,而不需要 Kafka。具有 CRUD(创建-读取-更新-删除)操作的订单表工作正常。

Redis支持的队列

数据库支持的消息队列仍然需要开发工作来创建队列表并从中读取/写入。对于预算有限且已经使用 Redis 进行缓存的小型初创公司,Redis 还可以用作消息队列。

有 3 种方法可以将 Redis 用作消息队列:

1.Pub/Sub 发布/订阅

2.List 列表

3.Stream 流

下图显示了它们的工作原理。

Pub/Sub 很方便,但有一些交付限制。当生产者将数据发布到同一密钥时,消费者订阅密钥并接收数据。限制是数据最多传递一次。如果使用者关闭且未收到已发布的数据,则该数据将丢失。此外,数据不会保留在磁盘上。如果 Redis 出现故障,则所有 Pub/Sub 数据都将丢失。Pub/Sub 适用于可以接受某些数据丢失的指标监控。

Redis 中的 List 数据结构可以构造 FIFO(先进先出)队列。使用者使用 BLPOP 在阻塞模式下等待消息,因此应应用超时。等待同一列表的消费者形成一个消费者组,其中每条消息仅由一个消费者使用。作为 Redis 数据结构,List 可以持久化到磁盘上。

Stream 解决了上述两种方法的限制。使用者选择从何处读取消息 - “$”表示新消息,“id”表示特定消息 ID,“0-0”表示从头开始读取。

总之,数据库支持和 Redis 支持的消息队列易于维护。如果它们不能满足我们的需求,专用的消息队列产品会更好。接下来我们将比较两个流行的选项。

对于需要可靠、可扩展和可维护系统的大型公司,请在以下方面评估消息队列产品:

  • 功能性

  • 性能

  • 可扩展性

  • 生态系统

下图比较了两种典型的消息队列产品:RabbitMQ 和 Kafka。

它们是如何工作的

RabbitMQ 的工作方式类似于消息传递中间件 - 它将消息推送给消费者,然后在确认时删除它们。这避免了 RabbitMQ 认为有问题的消息堆积。

Kafka 最初是为大规模日志处理而构建的。它会将消息保留到过期,并允许使用者按照自己的节奏拉取消息。

语言和 API

RabbitMQ 是用 Erlang 编写的,这使得修改核心代码具有挑战性。但是,它提供了非常丰富的客户端 API 和库支持。

Kafka 使用 Scala 和 Java,但也具有适用于 Python、Ruby 和 Node.js 等流行语言的客户端库和 API。

性能和可扩展性

RabbitMQ 每秒处理数万条消息。即使在更好的硬件上,吞吐量也不会高得多。

Kafka 每秒可以处理数百万条消息,具有很高的可扩展性。

生态系统

默认情况下,许多现代大数据和流式处理应用程序都集成了 Kafka。这使得它非常适合这些用例。

Message Queue使用案例

现在我们已经介绍了不同消息队列的功能,让我们看一些如何选择正确产品的示例。

日志处理和分析

对于具有购物车、订单和付款等服务的电子商务网站,我们需要分析日志以调查客户订单。

下图显示了使用“ELK”堆栈的典型体系结构:

  • ElasticSearch - 为全文搜索的日志编制索引

  • LogStash - 日志收集代理

  • Kibana - 用于搜索和可视化日志的 UI

  • Kafka - 分布式消息队列

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络连接 UDP2,UDP Connect, bind, send, recieve认知, -入门8

LWIP编程接口有RAW, NETCONN, SOCKET 2.UDP函数的理解 #define UDP_SERVER_PORT 8000 //PC side #define UDP_CLIENT_PORT 1234 // ctrl board side //PC IP address #define DEST_IP_ADDR0 192 #define DEST_IP_ADDR1 168 #define DEST_IP_ADDR2 3 #define DEST_IP_ADDR3 11…

实验笔记之——服务器链接

最近需要做NeRF相关的开发,需要用到GPU,本博文记录本人配置服务器远程链接的过程,本博文仅供本人学习记录用~ 连上服务器 首先先确保环境是HKU的网络环境(HKU AnyConnect也可)。伙伴已经帮忙创建好用户(第一次登录会提示重新设置密码)。用cmd ssh链接ssh -p 60001 <u…

液体装载机

效果演示 实现了一个SVG动画效果&#xff0c;其中包含了一个线条、两个圆圈和一个虚线。线条和虚线是使用SVG的stroke属性和stroke-dasharray属性实现的&#xff0c;圆圈是使用SVG的circle元素实现的。动画效果是使用CSS的animation属性实现的&#xff0c;其中包含了一个名为Sn…

解决Gitee每次push都需要输入用户名和密码

其实很简单&#xff0c;只需要使用命令 git config --global credential.helper store 在你下次push时只需要再输入一次用户名和密码&#xff0c;电脑就会保存下来&#xff0c;之后就无需进行输入了。

【数据库】聊聊常见的索引优化-上

数据库对于现有互联网应用来说&#xff0c;其实是非常重要的后端存储组件&#xff0c;而大多数系统故障都是由于存储所导致的&#xff0c;而数据库是重中之重&#xff0c;所以为了比较好掌握SQL的基本优化手段&#xff0c;打算用两篇文章从基本的联合索引优化、group by/order …

ChatGPT大升级,文档图像识别领域迎来技术革新

​写在前面ChatGPT迎来重大升级冲击与机遇并存​大模型时代的思考与探索■ 像素级OCR统一模型- UPOCR■ OCR大一统模型- SPTS v3■ 文档识别分析LLM应用 写在最后问卷抽奖 ​写在前面 2023 年 12 月 31 日第十九届中国图象图形学学会青年科学家会议在广州召开&#xff0c;该会…

AE (5)_auto exposure的驱动控制

#灵感# 有个项目&#xff0c;一开始驱动没配好&#xff0c;自动曝光乱飞。所以记下配置 参考链接&#xff1a;关于 bringup sensor 时&#xff0c;曝光时间异常的问题排查-CSDN博客 目录 确认最大曝光行&#xff1a; 1、曝光行配置 2、增益配置 raw 图发紫&#xff1a; 确…

《MySQL系列-InnoDB引擎06》MySQL锁介绍

文章目录 第六章 锁1 什么是锁2 lock与latch3 InnoDB存储引擎中的锁3.1 锁的类型3.2 一致性非锁定读3.3 一致性锁定读3.4 自增长与锁3.5 外键和锁 4 锁的算法4.1 行锁的三种算法4.2 解决Phantom Problem 5 锁问题5.1 脏读5.2 不可重复读5.3 丢失更新 6 阻塞7 死锁 第六章 锁 开…

BMS电池管理系统带充放电控制过流过压保护

2.4G无线采集BMS开发板&#xff08;主从一体&#xff09; 全新升级 &#xff08;赠送上位机源码TTL 上位机&#xff0c;可以改成自己想要的界面&#xff09; 12串电池TTL上位机 CAN通信上位机源码有偿开源&#xff0c;供项目二次开发。 增加STM32平台 USB转TTL通信 CAN通信 增加…

软件测试|使用PyMySQL访问MySQL数据库的详细指南

简介 PyMySQL是Python中流行的MySQL数据库驱动程序&#xff0c;它提供了便捷的方法来连接、查询和更新MySQL数据库。本文将为您提供使用PyMySQL访问MySQL数据库的详细指南&#xff0c;包括安装PyMySQL、连接数据库、执行查询和更新操作等。 环境准备 在开始之前&#xff0c;…

死锁与读写锁

一、死锁 死锁&#xff08;Deadlock&#xff09;是在并发计算中的一种状态&#xff0c;其中两个或多个进程无法继续执行&#xff0c;因为每个进程都在等待另一个进程释放所占用的资源。这种情况通常发生在系统中的资源分配过程中&#xff0c;其中每个进程都占用一些资源&#…

揭秘大模型「幻觉」:数据偏差、泛化与上下文理解的挑战与解决之道

什么是大模型「幻觉」 所谓的「幻觉」指的是当大模型生成与现实不符或逻辑上不连贯的信息时。这通常发生在模型对某些数据理解不足或数据本身存在偏差的情况下。由于模型是基于概率统计和以往数据训练的,它们可能在面对未知或少见情况时产生不准确的推断。 大模型不具有本地知…