消息队列笔记 | 青训营

45 阅读2分钟

消息队列:指保存消息的一个容器,本质是个队列。但这个队列支持高吞吐,高并发,并且高可用

常见流行的消息队列:ActiveMQ、RabbitMQ、Kafak、阿里的RocketMQ,以及目前存算分离的Pulsar

Kafka:分布式、分区的、多副本的日志提交服务,再高吞吐场景下发挥较为出色

RocketMQ:低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可扩展性,再一些实时场景中运用较广

Pulsar:是下一代云原生分布式消息流平台,集消息,存储,轻量化函数式计算为一体,采用存算分离的架构设计

使用场景:搜索服务,直播服务,订单服务,支付服务

Kafka的使用:创建集群,在集群中创建Topic并设置好分片数量,引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法。初始化一个消费者,调用Poll方法,接收到Send方法发送的消息

Topic:Kafka中的逻辑队列,不同业务场景不同的Topic,对于一个业务,所有的数据存储在这个topic中

Cluster:Kafka中的物理集群,每个集群可以新建多个不同的Topic

Partition:通常topic会有多个分片,不同分片之间消息可以并发处理,提高单个topic的吞吐量

Offset:消息在partition内的相对位置消息,可以理解为唯一ID,在patition内部严格递增

Replica:分片的副本,用来容灾

image.png (图片来源于kafka官方文档)

Kafka提高吞吐和稳定性: Producer 通过批量发送减少IO次数,从而加强发送能力 通过压缩,减少消息大小,支持Snappy,Gzip,LZ4,ZSTD压缩算法 Broker 通过顺序写,消息索引,零拷贝提高稳定性和吞吐量 Consumer 通过Rebalance提高稳定性