这是我参与[第五届青训营]伴学笔记创作活动的第9天
在学习字节跳动内部课程之前我其实都不太知道为什么要用,就是为了用而用,当体系化的去梳理的这部分知识的时候,发现它真的非常有用,而且有了一定的理解
消息队列的前世今生
为什么要使用消息队列?
这个问题本质上是在问消息队列的应用场景。
消息队列常见的使用场景吧,其实场景有很多,但是比较核心的有 3 个:解耦、异步、削峰。
解耦 :能够保证消息队列的发布订阅模式能够实现系统解耦,A系统产生了一条数据,就会发送到MQ中,哪个系统需要就去MQ中消费
异步:在用户发送请求给A系统,A系统需要给调用其他系统,只需要发送到MQ中,无需等待其他系统操作实现异步
削峰:在高并发场景下,每秒钟5k+条请求,也就是每秒执行5k条sql,但数据库最多支持每秒2k条,所以先将请求写入MQ,数据库以2k/s来读,能够度过高峰期,之后可以将挤压的消息解决掉即可
常见消息队列
- kafka:分布式、分区、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- Pulsar:是下一代云原生分布式消息流平台
- RocketMQ:低延迟、强一致、高性能、万亿容量和灵活的扩展性,在一些实时场景中运用广泛
- 和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的kafka集群
生产者: 向主题发布消息的客户端应用程序称为生产者(Producer),生产者用于持续不断的向某个主题发送消息。
消费者:订阅主题消息的客户端程序称为消费者(Consumer),消费者用于处理生产者产生的消息。
kafka
Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。
kafka的特性:
- 高吞吐、低延迟
- 高伸缩性:
- 持久性、可靠性:能够允许数据的持久化存储,消息被持久化到硬盘,并支持数据备份防止数据丢失
- 高并发
Kafka 的消息队列一般分为两种模式:点对点模式和发布订阅模式
- 点对点模式:一个生产者的消息被一个消费者消费
- 发布订阅模式:一个或多个生产者的消息被多个消费者同时消费
总结:
消息队列的应用场景有哪些?
中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。
如果是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。
参考
面试官:为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景? - 掘金 (juejin.cn)