这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
消息队列发展历程
消息中间件实际上诞生得很早,早在 1983 年互联网应用还是一片荒芜的年代,有个在美国的印度小哥 Vivek 就设想了一种通用软件总线,世界上第一个现代消息队列软件 The Information Bus(TIB)。TIB 受到了企业的欢迎,这家公司的业务发展引起了当时最牛气的 IT 公司 IBM 的注意,于是他们一开始研发了自己的消息队列软件,于是才有了后来的 WebSphere MQ,再后来微软也加入了战团。接近 2000 年的时候,互联网时代已经初见曙光,全球的应用程序得到了极大地丰富,对于程序之间互联互通的需求越来越强烈,但是各大 IT 公司之间还是牢牢建立着各种技术壁垒,以此来保证自己的商业利益,所以消息中间件在那个时候是大型企业才能够用得起的高级玩意。
但是时代的洪流不可逆转,有壁垒就有打破壁垒的后来者,2001 年 Sun 发布了 JMS 技术,试图在各大厂商的层面上再包装一层统一的 Java 规范。Java 程序只需要针对 JMS API 编程就可以了,不需要再关注使用了什么样的消息中间件,但是 JMS 仅仅适用于 Java。2004 年 AMQP(高级消息队列协议)诞生了,才是真正促进了消息队列的繁荣发展,任何人都可以针对 AMQP 的标准进行编码。有好的协议指导,再加上互联网分布式应用的迅猛发展成为了消息中间件一飞冲天的最大动力,程序应用的互联互通,发布订阅,最大契合了消息中间件的最初的设计初衷。除了刚才介绍过的收费中间件,后来开源消息中间件开始层出不穷,常见比较流行的有 ActiveMQ、RabbitMQ、Kafka、阿里的 RocketMQ,以及目前存算分离的 Pulsar,在目前互联网应用中消息队列中间件基本上成为标配。
业界消息队列对比
- kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致性、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的kafka集群
Kafka
-
搜索场景、直播服务、订单服务、支付服务
-
如何使用Kafka
- 第一步:首先需要创建一个Kafka集群
- 第二步:需要在这个集群中创建一个Topic,并且设置好分片数量
- 第三步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去
- 第四步:引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World
-
基本概念
- Topic:Kakfa中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中
- Cluster:Kafka的物理集群,每个集群中可以新建多个不同的topic
- Producer:顾名思义,也就是消息的生产端,负责将业务消息发送到Topic当中
- Consumer:消息的消费端,负责消费已经发送到topic中的消息
- Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐