最近发现很多号主发消息队列的文章,质量参差不齐,相关文章我之前也写过,建议直接看这篇 。
这篇文章,主要讲述 Kafka、RabbitMQ、RocketMQ 和 ActiveMQ 这 4 种消息队列的异同,无论是面试 , 还是用于技术选型,都有非常强的参考价值 。
不 BB,上文章目录:
文章插图
图片
01 消息队列基础1.1 什么是消息队列?消息队列是在消息的传输过程中保存消息的容器 , 用于接收消息并以文件的方式存储,一个消息队列可以被一个也可以被多个消费者消费,包含以下 3 元素:
- Producer:消息生产者,负责产生和发送消息到 Broker;
- Broker:消息处理中心 , 负责消息存储、确认、重试等,一般其中会包含多个 Queue;
- Consumer:消息消费者,负责从 Broker 中获取消息,并进行相应处理 。
文章插图
图片
1.2 消息队列模式
- 点对点模式:多个生产者可以向同一个消息队列发送消息,一个具体的消息只能由一个消费者消费 。
文章插图
图片
- 发布/订阅模式:单个消息可以被多个订阅者并发的获取和处理 。
文章插图
图片
1.3 消息队列应用场景
- 应用解耦:消息队列减少了服务之间的耦合性,不同的服务可以通过消息队列进行通信,而不用关心彼此的实现细节 。
- 异步处理:消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息 。
- 流量削锋:当上下游系统处理能力存在差距的时候,利用消息队列做一个通用的”载体”,在下游有能力处理的时候,再进行分发与处理 。
- 日志处理:日志处理是指将消息队列用在日志处理中,比如 Kafka 的应用,解决大量日志传输的问题 。
- 消息通讯:消息队列一般都内置了高效的通信机制 , 因此也可以用在纯的消息通讯 , 比如实现点对点消息队列,或者聊天室等 。
- 消息广播:如果没有消息队列,每当一个新的业务方接入,我们都要接入一次新接口 。有了消息队列,我们只需要关心消息是否送达了队列 , 至于谁希望订阅 , 是下游的事情 , 无疑极大地减少了开发和联调的工作量 。
2.1 KafkaApache Kafka 最初由 LinkedIn 公司基于独特的设计实现为一个分布式的提交日志系统,之后成为 Apache 项目的一部分,号称大数据的杀手锏,在数据采集、传输、存储的过程中发挥着举足轻重的作用 。
它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统 。
重要概念
- 主题(Topic):消息的种类称为主题,可以说一个主题代表了一类消息,相当于是对消息进行分类 , 主题就像是数据库中的表 。
- 分区(partition):主题可以被分为若干个分区,同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器上,由此来实现 kafka 的伸缩性 。
- 批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息 。
- 消费者群组(Consumer Group):消费者群组指的就是由一个或多个消费者组成的群体 。
- Broker: 一个独立的 Kafka 服务器就被称为 broker,broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存 。
- Broker 集群:broker 集群由一个或多个 broker 组成 。
- 重平衡(Rebalance):消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程 。
推荐阅读
- RabbitMQ与消息限流策略的完美结合
- 36岁宋茜跟小5岁欧豪隐婚,消息八九不离十?工作室回应了
- 0713陈楚生传来新消息,蔡国庆恭喜魏哲鸣,林志颖李玖哲再度重逢
- 刮油最狠的四种减肥蔬菜 怎么减脂肪最快最有效的方法
- 能咋得发表微博,微博设置特别关注的人的消息怎样才能及时收到怎么设置
- 有四种药酒是传自古代的 你知道他们的名字吗
- 小辣椒手机如何设置锁屏消息
- 微信验证消息能咋得看全
- qq互发消息怎么计数
- DNS消息:如何阅读查询和响应消息