程序天下:lamp网站开发黄金组合 pdf,如何写营销软文,网站软件下载app,杭州做外贸网站学习了kafka的原理知识后#xff0c;还要学会如何评估生产环境集群#xff0c;如果是一个大数据架构师#xff0c;这个是必须要会的#xff0c;比如kafka集群、Hbase集群、hadoop集群#xff0c;评估集群的方式差不多#xff0c;现在以kafka为例。
场景 电商平台#x… 学习了kafka的原理知识后还要学会如何评估生产环境集群如果是一个大数据架构师这个是必须要会的比如kafka集群、Hbase集群、hadoop集群评估集群的方式差不多现在以kafka为例。
场景 电商平台需要支持每天10亿请求发送到kafka集群。 场景拆解采用二八原则一般评估出来问题都不大。10亿请求-24小时过来的一般情况下每天晚上12:00到早上8:00这段时间其实是没有多大数据量的80%的请求是用的另外16个小时处理的。
qps评估 16个小时处理-8亿请求 16*0.23个小时处理-8亿请求的80%的数据6亿 也就是说3个小时处理6亿数据 我们简单算一下高峰期的qps 6亿/3小时5.5万/s qps5.5万 数据量评估 10亿请求*50kb假设消息大小46T每天要存储46T数据 一般情况下我们都会设置两个副本 46T*292T kafka里面的数据是有保存的时间周期的假设保留最近3天的数据 92T * 3天 276T 机器评估 场景总结搞定10亿请求高峰期5.5万qps276T的数据。需要多少台服务器 如果是公司架构师或者项目负责人做一个项目可能需要采购机器。 1首先分析一下是需要虚拟机还是物理机 像kafka mysql hadoop这些集群搭建的时候我们生产里面都是使用物理机。 2高峰期需要处理的请求每秒5.5万个其实一两台物理机绝对是可以抗住的。一般情况下我们评估机器的时候是按照高峰期的4倍去评估。如果是4倍的话大概我们集群的能力要准备到20万qps。这样子的集群才是比较安全的集群大概就需要5台物理机每台承受4万请求。 磁盘评估
场景总结搞定10亿请求高峰期5.5万的qps276T的数据需要5台物理机。
1使用SSD固态硬盘还是普通的机械硬盘 SSD硬盘性能比较好但是价格贵 SAS盘某方面性能不是很好但是比较便宜 SSD硬盘性能比较好指的是它随机读写的性能比较好。适合MySQL这样的集群但是其实它顺序写的性能跟SAS盘差不多。 kafka的理解就是用的顺序写所以用普通的机械硬盘就可以了。
2评估每台服务器需要多少块磁盘 5台服务器一共需要276T大约每台服务器需要存储60T的数据。我们公司里面服务器的配置用的是11块硬盘每个硬盘7T 11 * 7T 77T 77T * 5 台服务器 385T 内存评估
场景总结搞定10亿请求需要5台物理机11SAS * 7T一共需要多少内存
我们发现kafka读写数据的流程都是基于os cache换句话说假如咱们的os cache无限大那么整个kafka是不是相当于就是基于内存去操作如果是基于内存去操作性能肯定很好。
内存是有限的
1尽可能多的内存资源给os cache
2kafka的核心代码是scala写的客户端是java写的都是基于jvm所以我们还要给一部分内存给jvm。kafka的设计没有把很多数据结构都放在jvm里所以我们不用给太大内存给jvm。根据经验给个10G就可以了。 NameNode jvm里面还放了元数据几十GJVM一定要给得很大。比如给个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 10Gjvm 60G
64G的内存另外的4G操作系统本身也需要内存
其实kafka的jvm也可以不用给到10G这么多
评估出来64G是可以的
当然如果能给到128G的内存服务器是最好的。
上面评估的时候用的是一个topic 5个分区如果数据量比较大的topic可能会有10个分区。 CPU评估
场景总结搞定10亿请求需要5台物理机11SAS* 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台物理机11SAS * 7T需要64G内存128G更好需要16个cpu core32个更好
评估我们需要什么样的网卡 一般要么是千兆网卡1G/s 还有就是万兆网卡10G/s
高峰期每秒会有5.5万请求涌入5.5万/5 大约每台服务器会有1万请求涌入。
我们之前说过
10000 * 50kb消息大小 488M也就是每台服务器每秒要接收488M的数据数据还要有副本副本之间的同步也是走的网络请求488 * 2 976M/s
说明一下 很多公司的数据一个请求里面是没有50kb这么大的我们公司是因为主机在生产端封装了数据然后多条数据合并在一起了所以我们的一个请求才会有这么大。 一般情况下网卡的带宽是达不到极限的如果是千兆网卡我们能用的一般是700M左右所以最好情况这里的场景建议使用万兆网卡如果是万兆网卡就很轻松。 评估结论
搞定10亿请求需要
15台物理机11SAS * 7T
2每台机器64G内存128G更好
3每台机器16个cpu core32个更好
4万兆网卡 from 洱海老师
源码01-源码阅读准备之基础知识准备_哔哩哔哩_bilibili
深入浅出Kafka 深入浅出_哔哩哔哩_bilibili