关于消息队列的学习与总结 | 青训营

54 阅读2分钟

今天学习消息队列是之前完全没有接触过得内容,学起来很头大,这边也是简单结合老师的课件以及查阅的资料,对涉及的内容进行总结。

什么是消息队列以及为什么要有消息队列

举个例子,假设餐厅里有很多顾客点了不同的菜品。每当厨房完成了一道菜,我们需要将菜品送到相应的顾客桌上。但是一个服务员一次携带一道菜,无法同时马上把菜送到顾客桌上,这时,我们放个桌子来作为“消息队列”。每当将一道菜做好,就将它放在桌子上,然后再一次携带一道菜送到餐桌。 消息队列就像一个“中间人”,帮助不同的组件在异步、解耦和高效的方式下传递信息,解决了实时性、可靠性、并发性等问题。

涉及的概念

  1. Topic(主题): 消息的分类。生产者将消息发送到特定的主题,而消费者则从主题中读取消息。
  2. Partition(分区): 每个主题可以被分成多个分区,用于水平扩展和提高并发处理能力。
  3. Broker(代理): Kafka 集群中的服务器节点,负责存储消息并处理消息的发布和订阅。
  4. Producer(生产者): 将消息发布到 Kafka 主题的应用程序或组件。
  5. Consumer(消费者): 从 Kafka 主题中订阅消息并进行处理的应用程序或组件。
  6. Consumer Group(消费者组): 一组消费者共同订阅主题,Kafka 会确保每条消息只被消费者组中的一个消费者处理。
  7. Offset(偏移量): 每条消息在分区中的唯一标识,消费者通过偏移量来跟踪已消费的消息。

Kafka 和 BMQ 的对比

特点 / 对比项KafkaRabbitMQ (BMQ)
消息模型发布-订阅和队列发布-订阅、队列、请求-响应
通信模式异步通信同步和异步通信
吞吐量一般
持久性
扩展性一般
消费者组
协议支持自定义协议和APIAMQP,STOMP,MQTT
管理工具Kafka Manager等RabbitMQ Management插件
数据分区
适用场景大规模数据流处理、日志收集异步任务、消息队列、实时通信
语言支持多种编程语言多种编程语言