网站首页 > java教程 正文
Java面试经常会被问到消息中间件有哪些?下面我就来详解常见的消息中间件@mikechen
本篇已经收纳于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创作的《阿里架构师进阶专题合集》里面。
- 上一篇: 如何做好 Web 自定义排序产品设计?
- 下一篇: 用Delphi写中间件就是比Java香得多
猜你喜欢
- 2025-08-31 Java 中台技术盘点,这些技术你了解还远远不够
- 2025-08-31 Java SpringBoot和SpringMVC有什么区别(中间件系列)
- 2025-08-31 如果让你自己设计一个分布式架构的中间件系统,该怎么做?
- 2025-08-31 「MQ中间件」 RabbitMQ死信队列及内存监控
- 2025-08-31 分布式数据层中间件最全详解(图文全面总结)
- 2025-08-31 我们为什么用gRPC取代了Kafka(Java消息中间件)
- 2025-08-31 什么是rpc中间件_rpczq
- 2025-08-31 用Delphi写中间件就是比Java香得多
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)