消息队列 | 青训营

99 阅读4分钟

什么是消息队列

消息队列广泛应用于操作系统和应用程序,主要用来发送和接收处理消息,是消息传输过程中保存消息的容器。在大数据、云计算应用场景下,为了使应用程序具备高并发高可用性,业界实现了几种常见的消息队列中间件,例如 Kafka、ActiveMQ、RocketMQ 和 RabbitMQ 等。


消息队列的作用

消息队列主要有两种作用:解耦,生产端和消费端不需要相互依赖;异步,生产端不需要等待消费端的响应,直接返回,提高了吞吐量。

消息队列的发展阶段

消息队列中间件作为业界基础架构的关键组件由来已久,发展历程大致可以分为三个阶段。最早的消息队列开源产品ActiveMQ主要是围绕JMS、AMQP等标准化消息规范和协议设计的,目标是减轻经典RPC调用的紧耦合,剥离异步处理逻辑,解耦系统复杂度。第二个阶段便是以Kafka为经典代表的实时数据管道时代,主要应用场景是解决数据集成问题,提高数据在不同系统间的流转效率。同时,Lambda架构的引入使得Kafka和Storm成为当时实时计算的标配。数据管道、数据集成、实时计算是消息系统第三个阶段——流数据平台的重要特征。流数据平台不仅是一个简单的数据管道,更多的强调平台化。平台化会带来更多的挑战与困难,如业务多样性和数据海量化等,这使得消息系统必须配备完善的多租户管理,I/O隔离,流控与配额管理等功能。

ActiveMQ

ActiveMQ是一款由Apache软件基金会使用Java研发的基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的消息中间件,是一款支撑性软件系统。ActiveMQ 提供点对点(PTP)和订阅/发布(Pub/Sub)这两种消息传递模型,具有高效可靠的消息传递机制。得益于此,ActiveMQ 能支持跨平台的数据交互,使其能够在分布式环境下,提供进程级别的数据通信服务。

Kafka

Kafka是一种高吞吐量、分布式、多分区和多副本的流媒体平台,由美国领英公司提出, 使用Scala语言编写,随后成为Apache的顶级项目。Kafka和传统的消息系统相比有着巨大 优势,由于其是一个分布式系统,比较易于扩展。他支持多订阅模式,自动平衡消费者与生 产者,为发布和订阅提供高吞吐量,同时提供消息的持久化选项。Kafka当前主要被应用于两大类应用当中,一类是该应用需要在系统和程序之间构建数据流通道,第二类是该应用需要减缓高峰时期的巨量响应,Kafka对部分响应进行削峰处理。一个基本的 Kafka 体系结构包括若干个Producer,它们是消息的生产者,若干个 Broker,作为Kafka节点的集群服务器,若干个Comsumer,负责消息的消费,以及一个ZooKeeper集群。ZooKeepe负责对 Kafka 进行集群配置、选举各个 Partition 中的 Leader,在 Comnsumer Group 发生变化时,Zookeeper 对Consumer 进行负载均衡。Producer 在 push 模式下,将获得的消息发布到 Broker,Comsumer在 pull 模式下,从 Broker 订阅消息并且消费。

思考与总结

消息队列是一种常用的软件架构模式,被广泛应用于分布式系统、微服务架构等场景中。通过将任务或事件以消息的形式发送到队列中,可以实现系统间的解耦、异步处理和可靠性传输。总而言之,学习消息队列让我意识到它在分布式架构中的重要作用,解决了系统之间通信耦合以及异步处理的需求。通过合理使用消息队列,我们可以优化系统的性能、稳定性和可维护性,提升系统的整体效率。