必知必会:RocketMQ

Posted 时光编辑师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必知必会:RocketMQ相关的知识,希望对你有一定的参考价值。

  • 1.优点

应用解耦、异步处理、流量削峰。

  • 2.消息模型

发布-订阅模型。
一个消息可以被多个消费组消费;
一个消费组中包含多个消费者,同一个消费组的每个消费者负责一部分消息。

  • 3.消息模式:

有两种,集群消息和广播消息,默认是集群消息。

集群消息:一个消费组共同消费一个主题的多个队列,每个队列只能被一个消费者消费。

广播消息:消息会发给消费组的每一个消费者消费。

  • 4.基本架构:

NameServer、Broker、Producer、Consumer,为了保证高可用,这几个部分一般都是集群部署的。

NameServer:是一个无状态的服务器,每个NameServer相互独立,它们之间不存在任何信息交互。
主要功能是 1.和Broker结点保持长连接;2.维护Topic的路由信息。

Broker:负责存储和转发消息。
Borker内部维护着很多ConsumerQueue,用来存储消息的索引,真正消息存储在CommitLog日志文件中。
每个Borker与所有的NameServer保持长连接和心跳,并定时将Topic信息同步到NameServer。

Producer:消息生产者,消息由Producer通过负载均衡模式发送到Broker集群。
支持三种发送消息的方式:同步、异步、单项发送。

Consumer:消息消费者,支持两种消费模式:Pull和Push,支持集群消息和广播消息。
Pull:主要从消息服务器拉取消息,主要批量拉取到消息,用户就会启动消费过程。
Push:Push要先注册消费监听者,当监听器触发后就会开始消费消息。推送型消费者封装了消息的拉取、消息进度和其他内部维护工作。

5.消息在哪些阶段可能会丢失?

要从消息生产、消息存储、消息消费阶段考虑。

消息生产阶段:通过请求确认机制,来保证消息的可靠性传递。

消息存储阶段:1.消息持久化到CommitLog日志文件中即使宕机也可以恢复后再消费。刷盘机制分为同步刷盘和异步刷盘。
2.Broker主从模式来保证高可用,Broker支持同步复制和异步复制。
生产者的消息都是发送到Master。Slave可以同步复制Master或异步复制Master。
消费者可以从Master读取消息,也可以从Slave读取消息。
同步复制可保证即使Master宕机,Slave也有消息备份,保证消息不会丢失。

消息消费阶段:消费者需在收到消息并执行完所有消息业务逻辑后,再发送消息确认。
这样可以保证如果消息处理失败了,没有确认,再去从消息队列拉取的消息就还会是原来那条。

6.消息重复怎么处理?

业务幂等、消息去重。

业务幂等:即执行一次和多次结果一样。

消息去重:用消息的唯一编号来保证。

  • 7.消息积压怎么处理?

需要提高消费能力,如消费者扩容,消息迁移Queue扩容。

消费者扩容:如果当前Topic的消息队列的数量大于消费者数据,可以增加消费者来提供消费能力。
消息迁移Queue扩容:新建一个临时的Topic,临时的Topic多设置一些队列,将当前Topic的消息转发到临时的Topic中,然后再用扩容的消费者去消费新的Topic,后续再恢复。

  • 8.顺序消息怎么实现?

顺序消息就是消息的消费顺序要和产生顺序相同。顺序消息又分为全局顺序消息和局部顺序消息。

全局顺序消息:消除并发,读写队列设置为1,这样就牺牲了RocketMQ高并发、高吞吐的特性。

局部顺序消息:
(1)保证生产者把同一个ID的消息发往一个消息队列,发送端使用消息选择器类MessageQueueSelector控制把消息发往哪一个消息队列。
(2)由于每个队列的消息都是给同一个消费者消费的,这里只需保证消费者不要并发处理,可使用MessageListenerOrderly类处理。

使用消息内存队列:对关键字hash取模,保证同一ID的不同状态的数据能到一个内存队列。

  • 9.Broker是怎么保存数据的?

主要的存储文件有CommitLog文件、ConsumerQueue文件、IndexFile文件。

CommitLog:存储Producer端写入的消息主体内容。每个文件默认是1G,当文件满了就写入下一个文件,文件名记录了固定20长度的,记录了起始偏移量。

ConsumerQueue:可以看成是基于Topic的CommitLog索引文件;
保存有某个Topic下队列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息tag的HashCode值。

IndexFile:索引文件,提供了一个可以通过key或时间区间来查询消息的方法。

以上是关于必知必会:RocketMQ的主要内容,如果未能解决你的问题,请参考以下文章

必知必会的设计原则——合成复用原则

MySQL必知必会 第7-9章

SQL必知必会(第五版)

MySQL必知必会-资源下载

MYSQL必知必会,详尽入门,一文帮你学会SQL必知必会

SQL必知必会