本文主要是介绍如何为百亿数据请求做资源预估,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如何为百亿数据请求做资源预估
- 如何为百亿数据请求做资源预估
- 基本准则->先考虑要做什么
- 计算磁盘资源方法
- 200亿/s的请求,QPS怎么算, 总集群流量是多少, 选择千兆网还是万兆网?
- 每台kafka机器内存大小配置
- CPU核心数选型
如何为百亿数据请求做资源预估
收到需求:每天200亿请求,每个请求3k大小,需要4个副本,数据保留5天,数据有3个不同的主题。数据存储在kafka上,需要多少台机器,机器配置是怎样?
基本准则->先考虑要做什么
1.计算磁盘资源:计算一天的存储数据的增量
2.计算并发资源:QPS
3.计算内存资源:计算kafka内存消耗
计算磁盘资源方法
一天一个副本增量: 200亿*3k = 60T
考虑副本数量:60T*4 = 240T
考虑保留天数:240T*5=1200T
按照满负荷算:每台服务器一般12或16个盘,这里取12台: 需要服务器数量 = 1200T/(2T*12个)=50台
需要机器数量:资源磁盘利用率按照50%算: 应对未来的数据增量。 于是,磁盘使用率降低一半,机器数量需要增加一倍 50台 * 2 = 100台。 ( 1200T/(2T12个50%)=100台)
200亿/s的请求,QPS怎么算, 总集群流量是多少, 选择千兆网还是万兆网?
QPS主要计算高峰时间段的QPS数。
二八法则: 80%的请求在20%的时间产生。
00:00-08:00是请求低峰段
08:00-24:00 这16小时是请求高峰段 : 接收的请求 200亿*80% = 160亿请求
高峰期请求量: 这16小时也有高峰段: 16小时20% = 3.2小时 约等3小时 接收 160亿 * 80% = 128亿 的请求
每秒总QPS: 128亿/(3 * 60 * 60)秒 = 118w/s
每台机器QPS:118w/s / 100 = 1.18万/台 ,
总数据流量大小:每条数据大小3k, 单机流量 1.18w * 3k = 34M/s, 计算有4个副本 34M/s4 = 136M/s, 10个消费者,消费者的流量是34M/s10=340M/s。 总流量=生产流量+消费流量=340M/s + 136M/s = 476M/s
集群环境网卡:选择万兆网卡
每台kafka机器内存大小配置
按照上面配置,100台机器,每台磁盘2T*12个。
已知主题是3个,所以总共3个topic。 为了提高每台机器的cpu利用率,生产消费的并行度,每个topic在每台机器分配5个partition, 单个topic有500个partition(100台机器),4个副本,算上副本500*4=2000个partition,3个topic,就是2000 * 3 = 6000个partition
每台机器partiton数量:60个partition(6000个partition/100台机器)
每个分片日志大小是1G/个文件, 按照kafka把数据在内存读写的特点,把1G文件全部进行缓存,需要6000G内存,6000G/100台=60G/台机器。考虑数据读写很快,不需要把1G的内容全部进行缓存,可以50%或者25%放内存。按照50%进行计算, 每台机器内存需要30G。加上kafka的jvm大小(一般配置6G)和操作系统的内存。配置64G的内存。
CPU核心数选型
kafka的工作线程特点,主要工作线程ServerSocket类,内部封装了acceptor,processor, handler线程。
其他是一些后台线程和定时器线程等。
acceptor | processor | handler | |
---|---|---|---|
默认线程数 | 1 | 3 | 8 |
建议线程数 | 3 | 9 | 32 |
总线程数量大概100-200个。
安装生产经验
4core的机器,跑几十的线程,CPU跑满
8core的机器,跑几十个线程,OK
16core机器,跑100-200个线程
建议16core以上的机器,例如20,24核心。
这篇关于如何为百亿数据请求做资源预估的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!