招行面试:10Wqps场景,RocketMQ 顺序消费 的性能 如何提升 ?

本文原文链接

尼恩说在前面

在45岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格,遇到很多很重要的相关面试题:

问题 :10Wqps高并发,如何提升 RocketMQ 顺序消费性能? 该考虑哪些问题?

最近有小伙伴面试招行, 问到了相关的面试题。

小伙伴没有系统的去梳理和总结,所以支支吾吾的说了几句,面试官不满意,面试挂了。

所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。

当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典PDF》V175版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请到文末公号【技术自由圈】获取

招商银行的高阶Java后端面试真题

被狠狠拷打了,问的人都懵了。项目场景题太难了,不好好准备,真的答不出!

图片

尼恩将给出全部答案:

1.如何让系统抗住双十一的预约抢购活动?

45岁资深老架构师尼恩的参考答案,点此查看

2.如何从零搭建10万级QPS大流量、高并发优惠券系统?

45岁资深老架构师尼恩的参考答案,点此查看

3.百万级别数据的 Excel 如何快速导入到数据

45岁资深老架构师尼恩的参考答案,点此查看

4.如何设计一个支持万亿GB网盘实现秒传与限速的系统?

45岁资深老架构师尼恩的参考答案,点此查看

5.如何根据应用场景选择合适的消息中间件?

45岁资深老架构师尼恩的参考答案,点此查看

6.如何提升 RocketMQ 顺序消费性能?

本文

7.设计分布式调度框架,该考虑哪些问题?

45岁资深老架构师尼恩的参考答案,点此查看

9.如何让系统抗住双十一的预约抢购活动?

45岁资深老架构师尼恩的参考答案,点此查看

10.问 :如何解决高并发下的库存抢购超卖少买?

45岁资深老架构师尼恩的参考答案,点此查看

11.为什么高并发下数据写入不推荐关系数据?

45岁资深老架构师尼恩的参考答案,点此查看

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越多, 顺序消息 的 并发量越高。

  1. 设置更多的ConsumeQueue 提高并行度

    通过增加一个顺序 Topic 下的 ConsumeQueue 数量,可以提高该 Topic 的并行消费能力。

    因为每个 ConsumeQueue 可以由不同的消费者组中的消费者并行消费,当有更多的 ConsumeQueue 时,理论上可以分配给更多的消费者进行并行消费,从而提高整个 Topic 的并发处理能力。

  2. 设置更多的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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值