什么是消息队列
消息队列(MQ),指保存消息的一个容器,本质是个队列。该队列需要支持高吞吐,高并发,并且高可用。
消息队列发展历程
- 1985年:TIB,服务于金融机构和新闻机构
- 1993年:IBM MQ/WebSphere,商业消息队列平台市场主要玩家
- 1997年:MSMQ,微软发布
- 2001年:JMS,本质上是一套Java API
- 2004年:AMQP/RabbitMQ
- 2010年:Kafka,由Linked开源
- 2011年:RocketMQ,阿里中间件团队自研
- 2012年:Pulsar,诞生于Yahoo内部
业界消息队列对比
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar:下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用了存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐渐替换掉对应的Kafka集群
Kafka
使用场景
搜索服务、直播服务、订单服务、支付服务会产生日志信息、Metrics数据以及一些用户行为,需要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中的消息 ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉 Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐