面试题答案
一键面试关键因素
- 消息大小:消息的平均大小和最大大小会影响存储和传输成本,较小的消息能在相同资源下处理更多数量,大消息则相反。
- 消息峰值与平均量:日消息量1000万是平均量,需明确峰值情况,如峰值出现时间、倍数等,以应对突发流量。
- 消息留存时间:决定了消息在队列中保存多久,时间越长占用存储资源越多。
- 消费速度:消费者处理消息的速度,若消费慢可能导致消息积压,需考虑提升消费能力或调整队列容量。
- 副本因子:为保证数据可靠性设置的副本数量,副本越多占用存储资源越多,但数据安全性更高。
- 存储介质性能:如使用普通磁盘、SSD等,不同介质读写性能不同,影响消息处理效率。
容量规划计算方法及过程
- 计算存储容量
- 假设平均消息大小为
m
字节(例如m = 1024
字节即1KB),日消息量为N = 10000000
条,消息留存时间为t
天(假设t = 3
天)。 - 单条消息存储大小(考虑一定冗余,如10%):
M = m * 1.1
- 一天消息占用存储量:
S1 = N * M
t
天消息占用总存储量:S = S1 * t
- 例如,
m = 1024
字节,N = 10000000
,t = 3
,则M = 1024 * 1.1 = 1126.4
字节,S1 = 10000000 * 1126.4 = 11264000000
字节 ≈ 10.5GB,S = 10.5 * 3 = 31.5GB
- 假设平均消息大小为
- 计算主题与分区数量
- 根据消费速度和峰值流量计算。假设单个分区的消费能力为
C
条/秒(例如C = 1000
条/秒),一天按24 * 3600 = 86400
秒计算。 - 单个分区一天可处理消息量:
D = C * 86400
- 所需分区数:
P = ceil(N / D)
(ceil
为向上取整函数) - 例如,
C = 1000
条/秒,D = 1000 * 86400 = 86400000
条,P = ceil(10000000 / 86400000) = 1
(这里只是示例,实际可能因峰值等因素需要更多分区) - 主题数量根据业务模块划分,每个模块可设一个主题,或根据消息类型等进一步细分。
- 根据消费速度和峰值流量计算。假设单个分区的消费能力为
- 考虑副本因子
- 假设副本因子为
r
(例如r = 2
),则实际需要的存储容量为S * r
,分区数量也会相应增加以保证副本的分布。如上述例子,实际存储容量变为31.5 * 2 = 63GB
。
- 假设副本因子为