消息队列 | 青训营笔记

86 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

一、目录

本节课主要分为五个部分:

1.消息队列的前世今生

2.消息队列-Kafka

3.消息队列-BMQ

4.消息队列-RocketMQ

5.最佳实践

二、消息队列的前世今生

消息队列解决的问题

解耦、削峰、异步、日志处理。

概念

消息队列指保存消息的一个容器,本质是队列,需要支持高吞吐、高并发、高可用。

三、消息队列-Kafka

使用场景

业务日志、用户行为数据、Metrics数据。

基本概念

Producer、Cluster、Consumer、Topic、Partition。

基本架构

Broker:Kafka 集群中的一台或多台服务器统称为 Broker。

Topic:每条发布到 Kafka 的消息都有一个类别,这个类别被称为 Topic 。

Partition:Topic 物理上的分组,一个 Topic 可以分为多个 Partition ,每个 Partition 是一个有序的队列。Partition 中的每条消息都会被分配一个有序的 id。

Producer:消息和数据的生产者,可以理解为往 Kafka 发消息的客户端。

Consumer:消息和数据的消费者,可以理解为从 Kafka 取消息的客户端。

Consumer Group:消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

使用过程

先创建集群,然后新增Topic设置好分片数量,最后编写生产者逻辑(引入对应语言的SDK,配置好参数,初始化生产者)和消费者逻辑(引入对应语言的SDK,配置好参数,初始化消费者)。

弊端

运维成本高、解决方案复杂、完全依赖Page Cache、大量IO会造成其性能下降。

四、消息队列-BMQ

在BMQ集群中,对于单个副本来讲,是随机分配到不同的节点上面的,因此不会存在Kafka的负载不均问题。

基本架构

Broker、Proxy、HDFS、MetaStorage。

BMQ和Kafka对比

五、消息队列-RocketMQ

使用场景

低延时,针对电商业务线和业务峰值时刻。

基本概念

类似于Kafka,多出标签、生产者集群的概念。

基本架构

Producer、Broker、Nameserver、Consumer。

RocketMQ和Kafka对比

六、最佳实践