本文原文链接
尼恩说在前面
在45岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题:
问题 :10Wqps高并发,如何提升 RocketMQ 顺序消费性能? 该考虑哪些问题?
最近有小伙伴面试招行, 问到了相关的面试题。
小伙伴没有系统的去梳理和总结,所以支支吾吾的说了几句,面试官不满意,面试挂了。
所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。
当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V175版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取
招商银行的高阶Java后端面试真题
被狠狠拷打了,问的人都懵了。项目场景题太难了,不好好准备,真的答不出!

尼恩将给出全部答案:
1.如何让系统抗住双十一的预约抢购活动?
2.如何从零搭建10万级QPS大流量、高并发优惠券系统?
3.百万级别数据的 Excel 如何快速导入到数据
4.如何设计一个支持万亿GB网盘实现秒传与限速的系统?
5.如何根据应用场景选择合适的消息中间件?
6.如何提升 RocketMQ 顺序消费性能?
本文
7.设计分布式调度框架,该考虑哪些问题?
9.如何让系统抗住双十一的预约抢购活动?
10.问 :如何解决高并发下的库存抢购超卖少买?
11.为什么高并发下数据写入不推荐关系数据?
12.如果让你设计一个分布式链路跟踪系统?
即将发布。
前几天 尼恩给一个 小伙伴改造过一个 100wtps 链路跟踪平台简历, 非常NB, 牛到暴表。
本文目录
1:专用方案: 顺序消息 的 专用调优方案
首先,讲讲 顺序消息专用 的高并发调优方案。
1.1 简介:顺序消息 的2大专用的高并发调优方案
调优方案1:topic 设计优化:
rocketmq 为 分区内有序, 一个顺序的topic, 设置更多的consumequeue。
consumequeue越多, 顺序消息 的 并发量越高。
调优方案2:message 设计优化:
-
精简消息属性,只保留必要的信息,减少消息大小。
-
在应用层使用 Gzip 或 Snappy 等压缩算法对消息体进行压缩,减少消息体占用空间。
1.2 详解调优方案1: 如何进行 顺序消息 的 topic 优化?
首先回顾一下 ,什么是 顺序消息?
RocketMQ 中的顺序消息是指对于同一个消息分区(通常是同一个 Topic 下的一个逻辑分区),消息的消费顺序与发送顺序相同。
然后回顾一下 ,什么是 顺序消息 的 分区 有序?
对于顺序消息,RocketMQ 保证了同一分区内的消息顺序,不同分区的消息则不保证顺序。
这样可以在一定程度上兼顾顺序性和高并发性能。
例如,对于订单业务,同一个订单的创建、支付、发货等消息可以发送到同一个分区,以保证这些消息的顺序消费,而不同订单的消息可以在不同分区并行处理。
1.3 分区有序消息:
对于指定的一个 Topic ,所有消息根据 Sharding Key 进行区块分区,同一个分区内的消息按照严格的先进先出(FIFO)原则进行发布和消费。
同一分区内的消息保证顺序,不同分区之间的消息顺序不做要求。

分区有序适用场景:适用于性能要求高,以 Sharding Key 作为分区字段,在同一个区块中严格地按照先进先出(FIFO)原则进行消息发布和消费的场景。
示例:电商的订单创建,以订单 ID 作为 Sharding Key ,那么同一个订单相关的创建订单消息、订单支付消息、订单退款消息、订单物流消息都会按照发布的先后顺序来消费。
最后回顾一下 ,什么是 RocketMQ 中 的ConsumeQueue ?
ConsumeQueue 是 RocketMQ 中的消息索引文件,它存储了消息在 CommitLog 中的位置信息,是消息消费的关键索引。
当消费者拉取消息时,会先访问 ConsumeQueue,根据 ConsumeQueue 中的索引信息到 CommitLog 中获取消息。
每个 Topic 下可以有多个 ConsumeQueue,不同的 ConsumeQueue 可以映射到不同的分区,这样可以将消息的存储和消费负载分散,提高并发处理能力。
设置更多的 ConsumeQueue 提高并发量的思路, 大致如下:
顺序消息的专用优化手段: 增加 ConsumeQueue。ConsumeQueue越多, 顺序消息 的 并发量越高。
-
设置更多的ConsumeQueue 提高并行度:
通过增加一个顺序 Topic 下的 ConsumeQueue 数量,可以提高该 Topic 的并行消费能力。
因为每个 ConsumeQueue 可以由不同的消费者组中的消费者并行消费,当有更多的 ConsumeQueue 时,理论上可以分配给更多的消费者进行并行消费,从而提高整个 Topic 的并发处理能力。
-
设置更多的ConsumeQueue, 实现更好的 负载均衡:
更多的 ConsumeQueue 可以更精细地进行负载均衡。
在 RocketMQ 的集群环境中,当消费者组中的多个消费者订阅一个 Topic 时,它们会根据分配策略分配到不同的 ConsumeQueue 进行消费,更多的 ConsumeQueue 意味着可以更均匀地分配负载,避免部分消费者过载而部分消费者空闲的情况。
1.4 如何设置更多 ConsumeQueue?
在 RocketMQ 中设置更多 ConsumeQueue 的具体操作步骤:
创建 Topic 时设置更多的 ConsumeQueue 数量
- 方式一:可以 代码来创建 Topic 并指定 ConsumeQueue 数量。
- 方式二: 使用命令行工具(mqadmin)指定 ConsumeQueue 数量。
方式一: 使用命令行工具(mqadmin)指定 ConsumeQueue 数量, 具体的方法如下:
sh mqadmin updateTopic -n localhost:9876 -t OrderTopic -c DefaultCluster -r 8 -w 8
上述命令中,
-n localhost:9876 指定 NameServer 的地址,
-t OrderTopic 是要创建或更新的 Topic 名称,
-r 8 表示读队列数(通常等同于 ConsumeQueue 数量),
-w 8 表示写队列数。
这里将读队列数和写队列数都设置为 8,即设置了 8 个 Consume

最低0.47元/天 解锁文章
668

被折叠的 条评论
为什么被折叠?



