什么是消息队列?
消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高井发,井且高可用。
前世今生
- TIB诞生于1985年服务于金融机构和新闻机构
- IBM MQ/WebSphere诞生于1993年,商业消息队列平台市场主婴玩家
- MSMQ 微软发布于1997
- JMS 诞生于2001,本质上是一套java API
- AMQP/RabbitMQ规范发布于 2004年,同年RabbitMQ 面市
- Kafka 2010年由Linked开源
特点:布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色 - RocketMQ2011年阿里中间件团队自研
特点:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些 实时场景中运用较广 - Pulsar 2012年诞生于Yahoo内部特点
是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
Kafka
如何使用
graph TD
创建集群 --> 新增topic -->编写生产者逻辑 --> 编写消费者逻辑
在Kafka中,生产者可以向一个或多个主题(Topic)发送消息,而消费者则可以从这些主题订阅并读取消息。消息以有序的方式被追加到主题的分区(Partition)中,并且每一条消息都可以由唯一的偏移量(Offset)标识。这种分区机制使得Kafka可以支持海量数据的存储和处理,并且允许应用程序进行并发读写操作。
Topic:逻辑队列,不同Topic可以建立不同的Topic
Cluster:物理集群,每个集群中可以建立多个不同的Topic
Producer:生产者,负责将业务消息发送到Topic中
Consumer:消费者,负责消费Topic中的消息
ConsumerGroup: 消费者组,不同组Consumer消费进度互不干涉
Offset :消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。
Kafka就像一个高效率而且可靠的邮递员,可以帮助我们发送和收取各种消息。它的系统由四个重要部分组成:生产者、消费者、Broker(消息存储和传输节点)、Zookeeper(协调管理节点)。我们可以将不同种类的消息放在Kafka的主题(Topic)中,并划分为不同的消息区域(Partition),这样可以方便消息的管理和处理。当生产者向某个主题发布一条消息时,Kafka会自动保存到其中的一个Partition里面,并且给这条消息打上唯一标识符Offset。消费者可以从Broker上订阅这些主题并读取其中的消息数据。此外,Kafka还实现了自动的负载均衡、故障恢复等功能,能够帮助我们处理海量数据和流式数据。