消息队列 | 青训营笔记

150 阅读3分钟

消息队列发展历程:

TIB -> IBM MQ/WebSphere -> MSMQ -> JMS -> AMQP/RabbitMQ -> Kafka -> RocketMQ -> Pulsar

TIB是最早的消息队列之一,但已经被IBM MQ/WebSphere、MSMQ、JMS等较新的消息队列所替代。随着互联网业务的发展,AMQP和RabbitMQ成为了许多企业的首选。而在高吞吐和低延迟方面,Kafka和RocketMQ也得到了广泛的应用。Pulsar则是一款新兴的云原生消息流平台,受到了越来越多企业的关注和青睐。

业界消息队列对比:

  1. Kafka:分布式、分区、多副本的日志提交服务,适合在高吞吐场景下使用。常用于处理日志信息、Metrics数据、用户行为(搜索、点赞、评论、收藏)等。

  2. RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,适合一些实时场景。常用于在线支付、在线交易、实时监控等。

  3. Pulsar:下一代云原生分布式消息流平台,集消息、存储、轻量化的计算为一体,采用存算分离的架构设计。比Kafka和RocketMQ更具有弹性和可扩展性。

  4. BMQ:兼容Kafka协议,存算分离,适合高吞吐的离线业务场景。旨在逐步替换掉对应的Kafka集群。

基本概念:

  1. Topic:逻辑队列,消息的存储和订阅都是基于Topic的。

  2. Cluster:物理集群,每个集群中可以建立多个不同的Topic。

  3. Partition:每个Topic通常有多个分片,称为Partition。

  4. Producer:生产者,负责将业务消息发送到Topic中。

  5. Consumer:消费者,负责消费Topic中的消息。

  6. Consumer Group:消费者组,不同组的Consumer消费进度互不干涉。

  7. Offset:消息在Partition内的相对位置信息,可以理解为唯一ID,在Partition内严格递增。

  8. Replica:每个Partition有多个Replica,Leader Replica将会从ISR中选出。

性能优化:

  1. 批处理:生产者可以批量发送消息,以减少IO次数。

  2. 数据压缩:通过压缩减少消息大小,目前支持Snappy、Gzip、LZ4、ZSTD压缩。

  3. 零拷贝:减少数据在内核空间和用户空间的拷贝次数。

高级特性:

  1. 事务消息:可以实现基于两阶段提交的分布式事务。

  2. 延迟消息:将消息延时发送,有利于实现一些时间敏感的场景。

  3. 消费重试和死信队列:在消费失败后,可以进行多次重试,并将无法被处理的消息发送至死信队列。

个人总结和分析:

  1. 消息队列是现代化互联网业务中不可或缺的一部分,它可以实现不同系统、不同服务之间的异步通信,提高了系统的可扩展性和性能。

  2. 消息队列的发展历程经历了多个阶段,从最初的TIB到现在的Pulsar,不断迭代和优化,适应了互联网业务的需求。

  3. 目前业界常用的消息队列有Kafka、RocketMQ、Pulsar等。它们各有优点,可以根据实际需求进行选用。

  4. 在使用消息队列时,需要对一些基本概念进行了解,如Topic、Cluster、Partition、Producer、Consumer等。

  5. 为了提高消息队列的性能,在实际应用中需要考虑一些性能优化方案,如批处理、数据压缩、零拷贝等。

  6. 同时,在高级特性方面,事务消息、延迟消息、消费重试和死信队列也会在实际应用中发挥重要作用。

综上所述,消息队列是现代化互联网业务中不可或缺的一部分,了解它的基本概念、常用方案和高级特性,可以帮助我们更好地应对实际应用场景中的需求和问题。