消息队列发展历程:
TIB -> IBM MQ/WebSphere -> MSMQ -> JMS -> AMQP/RabbitMQ -> Kafka -> RocketMQ -> Pulsar
TIB是最早的消息队列之一,但已经被IBM MQ/WebSphere、MSMQ、JMS等较新的消息队列所替代。随着互联网业务的发展,AMQP和RabbitMQ成为了许多企业的首选。而在高吞吐和低延迟方面,Kafka和RocketMQ也得到了广泛的应用。Pulsar则是一款新兴的云原生消息流平台,受到了越来越多企业的关注和青睐。
业界消息队列对比:
-
Kafka:分布式、分区、多副本的日志提交服务,适合在高吞吐场景下使用。常用于处理日志信息、Metrics数据、用户行为(搜索、点赞、评论、收藏)等。
-
RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,适合一些实时场景。常用于在线支付、在线交易、实时监控等。
-
Pulsar:下一代云原生分布式消息流平台,集消息、存储、轻量化的计算为一体,采用存算分离的架构设计。比Kafka和RocketMQ更具有弹性和可扩展性。
-
BMQ:兼容Kafka协议,存算分离,适合高吞吐的离线业务场景。旨在逐步替换掉对应的Kafka集群。
基本概念:
-
Topic:逻辑队列,消息的存储和订阅都是基于Topic的。
-
Cluster:物理集群,每个集群中可以建立多个不同的Topic。
-
Partition:每个Topic通常有多个分片,称为Partition。
-
Producer:生产者,负责将业务消息发送到Topic中。
-
Consumer:消费者,负责消费Topic中的消息。
-
Consumer Group:消费者组,不同组的Consumer消费进度互不干涉。
-
Offset:消息在Partition内的相对位置信息,可以理解为唯一ID,在Partition内严格递增。
-
Replica:每个Partition有多个Replica,Leader Replica将会从ISR中选出。
性能优化:
-
批处理:生产者可以批量发送消息,以减少IO次数。
-
数据压缩:通过压缩减少消息大小,目前支持Snappy、Gzip、LZ4、ZSTD压缩。
-
零拷贝:减少数据在内核空间和用户空间的拷贝次数。
高级特性:
-
事务消息:可以实现基于两阶段提交的分布式事务。
-
延迟消息:将消息延时发送,有利于实现一些时间敏感的场景。
-
消费重试和死信队列:在消费失败后,可以进行多次重试,并将无法被处理的消息发送至死信队列。
个人总结和分析:
-
消息队列是现代化互联网业务中不可或缺的一部分,它可以实现不同系统、不同服务之间的异步通信,提高了系统的可扩展性和性能。
-
消息队列的发展历程经历了多个阶段,从最初的TIB到现在的Pulsar,不断迭代和优化,适应了互联网业务的需求。
-
目前业界常用的消息队列有Kafka、RocketMQ、Pulsar等。它们各有优点,可以根据实际需求进行选用。
-
在使用消息队列时,需要对一些基本概念进行了解,如Topic、Cluster、Partition、Producer、Consumer等。
-
为了提高消息队列的性能,在实际应用中需要考虑一些性能优化方案,如批处理、数据压缩、零拷贝等。
-
同时,在高级特性方面,事务消息、延迟消息、消费重试和死信队列也会在实际应用中发挥重要作用。
综上所述,消息队列是现代化互联网业务中不可或缺的一部分,了解它的基本概念、常用方案和高级特性,可以帮助我们更好地应对实际应用场景中的需求和问题。