今天学习消息队列是之前完全没有接触过得内容,学起来很头大,这边也是简单结合老师的课件以及查阅的资料,对涉及的内容进行总结。
什么是消息队列以及为什么要有消息队列
举个例子,假设餐厅里有很多顾客点了不同的菜品。每当厨房完成了一道菜,我们需要将菜品送到相应的顾客桌上。但是一个服务员一次携带一道菜,无法同时马上把菜送到顾客桌上,这时,我们放个桌子来作为“消息队列”。每当将一道菜做好,就将它放在桌子上,然后再一次携带一道菜送到餐桌。 消息队列就像一个“中间人”,帮助不同的组件在异步、解耦和高效的方式下传递信息,解决了实时性、可靠性、并发性等问题。
涉及的概念
- Topic(主题): 消息的分类。生产者将消息发送到特定的主题,而消费者则从主题中读取消息。
- Partition(分区): 每个主题可以被分成多个分区,用于水平扩展和提高并发处理能力。
- Broker(代理): Kafka 集群中的服务器节点,负责存储消息并处理消息的发布和订阅。
- Producer(生产者): 将消息发布到 Kafka 主题的应用程序或组件。
- Consumer(消费者): 从 Kafka 主题中订阅消息并进行处理的应用程序或组件。
- Consumer Group(消费者组): 一组消费者共同订阅主题,Kafka 会确保每条消息只被消费者组中的一个消费者处理。
- Offset(偏移量): 每条消息在分区中的唯一标识,消费者通过偏移量来跟踪已消费的消息。
Kafka 和 BMQ 的对比
| 特点 / 对比项 | Kafka | RabbitMQ (BMQ) |
|---|---|---|
| 消息模型 | 发布-订阅和队列 | 发布-订阅、队列、请求-响应 |
| 通信模式 | 异步通信 | 同步和异步通信 |
| 吞吐量 | 高 | 一般 |
| 持久性 | 是 | 是 |
| 扩展性 | 高 | 一般 |
| 消费者组 | 是 | 是 |
| 协议支持 | 自定义协议和API | AMQP,STOMP,MQTT |
| 管理工具 | Kafka Manager等 | RabbitMQ Management插件 |
| 数据分区 | 是 | 是 |
| 适用场景 | 大规模数据流处理、日志收集 | 异步任务、消息队列、实时通信 |
| 语言支持 | 多种编程语言 | 多种编程语言 |