消息队列基础 | 青训营笔记

101 阅读3分钟

概念

消息队列 (Message queue) 是一种异步的服务间通信方式,适用于无服务器和微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

发布者/订阅者模型:在消息队列系统中,消息的发送方称为发布者(Publisher),而消息的接收方称为订阅者(Subscriber)。

消息队列的好处

解耦

通过消息队列,发送方和接收方之间解耦,不需要直接知道彼此的存在。降低系统耦合性

削峰

先将短时间高并发产生的事务消息存储在消息队列中,再做后续业务处理。如果消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。

异步

将一些业务流程以异步并行的方式执行,从而减少请求响应时间,提高系统吞吐量。

(异步通信是一种通信模式,其中消息的发送方和接收方之间不需要实时交互,发送方可以继续执行其他任务,而不必等待接收方的响应。在消息队列中,消息的发送方将消息放入队列,而接收方从队列中获取消息进行处理。)

Kafka

Kafka是一个分布式系统,由服务器客户端组成,它们通过高性能的TCP网络协议进行通信。它可以部署在裸机硬件、虚拟机和容器中,可以在本地环境和云环境中使用。

服务器:Kafka以一个或多个服务器的集群方式运行,可以跨越多个数据中心或云区域。其中一些服务器构成了存储层,称为代理(brokers)。其他服务器运行Kafka Connect,以连续地将数据导入和导出为事件流,以将Kafka与现有系统(如关系型数据库)以及其他Kafka集群集成在一起。为了实现关键任务的用例,Kafka集群具有高可伸缩性和容错性:如果其中任何一个服务器发生故障,其他服务器将接管其工作,确保持续运营而无数据丢失。

客户端:它们允许您编写分布式应用程序和微服务,以并行、大规模且容错的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。Kafka附带了一些内置的客户端,并由Kafka社区提供了几十种客户端:Java和Scala客户端包括更高级别的Kafka Streams库,还有Go、Python、C/C++和许多其他编程语言的客户端,以及REST API。

RocketMQ

Apache RocketMQ是一个具有低延迟、高性能和可靠性的分布式消息传递和流处理平台,具备万亿级容量和灵活可扩展性。

使用场景:例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等。

对比

KafkaRocketMQ
逻辑队列TopicTopic
消息体MessageMessage
标签Tag
分区PartitionConsumerQueue
生产者ProducerProducer
生产者集群Producer Group
消费者ConsumerConsumer
消费者集群Consumer GroupConsumer Group
集群控制器ControllerNameserver