生产环境评估机器的方法

        学习了kafka的原理知识后,还要学会如何评估生产环境集群,如果是一个大数据架构师,这个是必须要会的,比如kafka集群、Hbase集群、hadoop集群,评估集群的方式差不多,现在以kafka为例。

场景

        电商平台,需要支持每天10亿请求发送到kafka集群。

        场景拆解:采用二八原则,一般评估出来问题都不大。10亿请求->24小时过来的,一般情况下,每天晚上12:00到早上8:00这段时间其实是没有多大数据量的,80%的请求是用的另外16个小时处理的。

qps评估

        16个小时处理->8亿请求

        16*0.2=3个小时处理->8亿请求的80%的数据=6亿

        也就是说3个小时处理6亿数据

        我们简单算一下高峰期的qps:

                6亿/3小时=5.5万/s   qps=5.5万

数据量评估

        10亿请求*50kb(假设消息大小)=46T,每天要存储46T数据

        一般情况下,我们都会设置两个副本 46T*2=92T

        kafka里面的数据是有保存的时间周期的,假设保留最近3天的数据

        92T * 3天 = 276T

机器评估

        场景总结:搞定10亿请求,高峰期5.5万qps,276T的数据。需要多少台服务器?

        如果是公司架构师或者项目负责人,做一个项目可能需要采购机器。

        1)首先分析一下是需要虚拟机还是物理机

        像kafka mysql hadoop这些集群搭建的时候,我们生产里面都是使用物理机。

        2)高峰期需要处理的请求每秒5.5万个,其实一两台物理机绝对是可以抗住的。一般情况下,我们评估机器的时候,是按照高峰期的4倍去评估。如果是4倍的话,大概我们集群的能力要准备到20万qps。这样子的集群才是比较安全的集群,大概就需要5台物理机,每台承受4万请求。

磁盘评估

场景总结:搞定10亿请求,高峰期5.5万的qps,276T的数据,需要5台物理机。

1)使用SSD固态硬盘?还是普通的机械硬盘?

        SSD硬盘:性能比较好,但是价格贵

        SAS盘:某方面性能不是很好,但是比较便宜

        SSD硬盘性能比较好,指的是它随机读写的性能比较好。适合MySQL这样的集群,但是其实它顺序写的性能跟SAS盘差不多。

        kafka的理解:就是用的顺序写,所以用普通的机械硬盘就可以了。

2)评估每台服务器需要多少块磁盘

        5台服务器,一共需要276T,大约每台服务器需要存储60T的数据。我们公司里面服务器的配置用的是11块硬盘,每个硬盘7T

        11 * 7T = 77T

        77T * 5 台服务器 = 385T

内存评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS) * 7T,一共需要多少内存?

我们发现kafka读写数据的流程都是基于os cache,换句话说假如咱们的os cache无限大,那么整个kafka是不是相当于就是基于内存去操作,如果是基于内存去操作,性能肯定很好。

内存是有限的

1)尽可能多的内存资源给os cache

2)kafka的核心代码是scala写的,客户端是java写的,都是基于jvm,所以我们还要给一部分内存给jvm。kafka的设计,没有把很多数据结构都放在jvm里,所以我们不用给太大内存给jvm。根据经验,给个10G就可以了。

        NameNode:

                jvm里面还放了元数据(几十G),JVM一定要给得很大。比如给个100G

假设我们这个10亿请求的项目,一共会有100个topic

100 topic * 5 partition * 2 = 1000 partition

一共partition其实就是物理机上面的一个目录,这个目录下面会有很多个.log文件。.log就是存储数据文件,默认情况下一个.log文件大小是1G。

我们如果要保证1000个partition的最新.log文件的数据都在内存里,这时候性能就是最好,1000 * 1G = 1000G内存。

我们只需要吧当前最新的这个log保证里面的25%的最新数据在内存里面:

0.25G * 1000 = 250G的内存

250G内存 / 5台机器 = 50G

50G + 10G(jvm)= 60G

64G的内存,另外的4G,操作系统本身也需要内存

其实kafka的jvm也可以不用给到10G这么多

评估出来64G是可以的

当然如果能给到128G的内存服务器是最好的。

上面评估的时候用的是一个topic 5个分区,如果数据量比较大的topic可能会有10个分区。

CPU评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS)* 7T,需要64G的内存(128G更好)

评估一下每台服务器需要多少cpu core(资源很有限)

我们评估需要多少个cpu,依据就是看我们的服务里面有多少线程去跑。

线程就是依托cpu去运行的。如果我们的线程比较多,但是cpu core比较少,这样的话,我们的机器负载就会很高,性能就不好。

1)评估一下,kafka的一台服务器启动以后会有多少线程?

       Accept线程       默认1

       processor线程  默认3     可设置6~9个线程 

       requestHandler线程  默认8   可设置32个线程        

        定时清理的线程,拉取数据的线程,定时检查ISR列表的线程,等等。

所以大概一个kafka的服务器启动起来后,会有一百多个线程。

cpu core = 4个,一般来说,几十个线程,就肯定把cpu打满了。

cpu core = 8个,应该能很轻松的支持几十个线程。

如果我们的线程有100多个,或者差不多200个,那么8个线程是搞不定的。

所以我们这儿建议:

cpu core = 16个。如果可以的话,能给到32 cpu core那就更好。

2 cpu * 8 = 16 cpu core

4 cpu * 8 = 32 cpu core

网卡评估

场景总结:搞定10亿请求,需要5台物理机,11(SAS) * 7T,需要64G内存(128G更好),需要16个cpu core(32个更好)

评估我们需要什么样的网卡?

        一般要么是千兆网卡(1G/s), 还有就是万兆网卡(10G/s)

高峰期每秒会有5.5万请求涌入,5.5万/5 = 大约每台服务器会有1万请求涌入。

我们之前说过:

10000 * 50kb(消息大小) = 488M,也就是每台服务器每秒要接收488M的数据,数据还要有副本,副本之间的同步也是走的网络请求,488 * 2 = 976M/s

说明一下:

        很多公司的数据,一个请求里面是没有50kb这么大的,我们公司是因为主机在生产端封装了数据,然后多条数据合并在一起了,所以我们的一个请求才会有这么大。

        一般情况下,网卡的带宽是达不到极限的,如果是千兆网卡,我们能用的一般是700M左右,所以最好情况这里的场景建议使用万兆网卡,如果是万兆网卡就很轻松。

评估结论

搞定10亿请求,需要:

1)5台物理机,11(SAS) * 7T

2)每台机器64G内存(128G更好)

3)每台机器16个cpu core(32个更好)

4)万兆网卡

from 洱海老师

源码:01-源码阅读准备之基础知识准备_哔哩哔哩_bilibili

深入浅出:Kafka 深入浅出_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值