消息队列原来这么有用 | 青训营笔记

115 阅读3分钟

这是我参与[第五届青训营]伴学笔记创作活动的第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)

【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)