Java面试经常会被问到消息中间件有哪些?下面我就来详解常见的消息中间件@mikechen
1.Apache Kafka
Kafka是一个分布式的高吞吐量的消息系统,最初由LinkedIn开发,现在是Apache软件基金会的顶级开源项目之一。
Kafka广泛应用于多种用例,例如:实时数据流处理、日志聚合、监控、指标和日志收集、消息队列等。
Kafka的核心架构,如下图所示:
- 主题(Topic):消息的逻辑分组,所有消息都属于一个主题。
- 生产者(Producer):将消息发送到Kafka,可以指定主题和分区。
- 消费者(Consumer):从Kafka消费消息,可以订阅一个或多个主题。
- 分区(Partition):一个主题可以分成多个分区,每个分区都是一个有序的日志,可以在多个节点上进行并行处理。
- 偏移量(Offset):消费者可以记录自己已经消费过的位置,称之为偏移量,Kafka会为每个分区维护一个偏移量。
消息通过一个或多个Kafka集群的代理(Broker)进行传输和存储。
2.RabbitMQ
RabbitMQ是一个开源、跨平台的消息中间件,实现了AMQP协议,支持多种编程语言,RabbitMQ是erlang语言开发。
RabbitMQ架构,如下图所示:
RabbitMQ原理会涉及到如下组件:
- 队列(Queue):消息的存储区域,消费者从队列中获取消息,生产者将消息发送到队列中。
- 交换器(Exchange):接收生产者的消息,并根据路由键将消息发送到相应的队列中。
- 绑定(Binding):连接交换器和队列之间的路由规则。
- 生产者(Producer):将消息发送到交换器中。
- 消费者(Consumer):从队列中获取消息。
RabbitMQ主要应用于任务分发、异步通信、事件驱动等场景。
3.ActiveMQ
ActiveMQ是一个流行的开源消息中间件,支持JMS和STOMP协议,适用于异步通信、解耦和缓冲等场景。
ActiveMQ是老牌的消息中间件,是第一代的消息中间件,是一个完全基于 JMS(Java 消息服务)规范的消息中间件。
4.RocketMQ
RocketMQ是一个分布式的消息队列系统,由阿里巴巴集团开发并开源。
RocketMQ的优点在于:
- 高吞吐量和低延迟:RocketMQ采用了Zero Copy技术和批量传输技术,可以实现高吞吐量和低延迟的消息传输。
- 分布式架构:RocketMQ采用了分布式架构,可以实现高可用性和容错性。
- 消息顺序性:RocketMQ可以保证同一个队列中的消息的顺序性。
- 消息可靠性:RocketMQ采用了多种机制来保证消息的可靠性,如同步刷盘和主从复制等。
RocketMQ架构,如下图所示:
RocketMQ架构主要由以下几个组件构成:
- Nameserver:负责管理Broker的注册和发现。
- Broker:是RocketMQ的核心组件,负责存储和转发消息。
- Producer:生产者负责生产消息,并将消息发送给Broker。
- Consumer:消费者负责订阅消息并进行消费。
- 消息存储:RocketMQ采用了写入内存,异步刷盘的方式来存储消息,同时还支持消息持久化到磁盘中。
关于RocketMQ架构原理,更加详细的内容请查看:RocketMQ架构原理详解(4大工作原理设计图解)
5.Pulsar
Pulsar是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台。
Pulsar被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。
其整体架构图如下所示:
以下是Pulsar架构的基本原理:
- 分层架构:Pulsar采用分层架构,其中Broker层和BookKeeper层分别处理消息传递和消息存储的任务。
- 多租户支持:Pulsar支持多租户架构,这意味着多个用户可以共享同一个Pulsar集群,并独立地控制其访问权限。
- 持久性和可靠性:Pulsar使用BookKeeper来存储消息,这是一种高度可靠的分布式日志存储系统。
- 可扩展性:Pulsar可以轻松地水平扩展,以处理高并发和高吞吐量的消息流。
- 支持多种协议:Pulsar支持多种协议,这使得Pulsar可以轻松地与不同的应用程序集成。
Pulsar的主要设计目标是提供高可用性、可扩展性和可维护性,同时保持高吞吐量和低延迟。
以上就是常见的消息中间件介绍,更多内容请查看:消息中间件最全详解(万字图文总结)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》