计划背景

假如每天集群须要承载10亿数据。一天24小时,早晨12点到凌晨8点简直没多少数据。

应用二八法令预计,也就是80%的数据(8亿)会在16个小时涌入,而且8亿的80%的数据(6.4亿)会在这16个小时的20%工夫(3小时)涌入。

QPS计算公式:640000000 ÷ (3x60x60) = 60000,也就是说高峰期的时候Kafka集群要扛住每秒6万的并发。

磁盘空间计算,每天10亿数据,每条50kb,也就是46T的数据。保留2个正本(在上一篇中也提到过其实两个正本会比拟好,因为follower须要去leader那里同步数据,大数据培训同步数据的过程须要消耗网络,而且须要磁盘空间,然而这个须要依据理论状况思考),46 2 = 92T,保留最近3天的数据。故须要 92 3 = 276T。

QPS方面

部署Kafka,Hadoop,MySQL……等外围分布式系统,个别倡议间接采纳物理机,摈弃应用一些低配置的虚拟机的想法。高并发这个货色,不可能是说,你须要撑持6万QPS,你的集群就刚好把这6万并发卡的死死的。退出某一天出一些流动让数据量疯狂上涨,那整个集群就会垮掉。

然而,如果说你只有撑持6w QPS,单台物理机自身就能扛住4~5万的并发。所以这时2台物理机相对相对够了。然而这里有一个问题,咱们通常是倡议,公司估算短缺,尽量是让顶峰QPS管制在集群能承载的总QPS的30%左右(也就是集群的解决能力是高峰期的3~4倍这个样子),所以咱们搭建的kafka集群能承载的总QPS为20万~30万才是平安的。所以大体上来说,须要5~7台物理机来部署,基本上就很平安了,每台物理机要求吞吐量在每秒4~5万条数据就能够了,物理机的配置和性能也不须要特地高。

磁盘方面

磁盘数量

须要5台物理机的状况,须要存储276T的数据,均匀下来差不多一台56T的数据。这个具体看磁盘数和盘的大小。

SAS还是SSD

当初咱们须要思考一个问题:是须要SSD固态硬盘,还是一般机械硬盘?

SSD就是固态硬盘,比机械硬盘要快,那么到底是快在哪里呢?其实SSD的快次要是快在磁盘随机读写,就要对磁盘上的随机地位来读写的时候,SSD比机械硬盘要快。比如说MySQL这种就应该应用SSD了(MySQL须要随机读写)。北京大数据培训比如说咱们在布局和部署线上零碎的MySQL集群的时候,一般来说必须用SSD,性能能够进步很多,这样MySQL能够承载的并发申请量也会高很多,而且SQL语句执行的性能也会进步很多。

因为写磁盘的时候Kafka是程序写的。机械硬盘程序写的性能机会跟内存读写的性能是差不多的,所以对于Kafka集群来说其实应用机械硬盘就能够了。如果是须要本人守业或者是在公司老本有余的状况下,经费是可能缩减就尽量缩减的。

内存角度

JVM十分怕呈现full gc的状况。Kafka本身的JVM是用不了过多堆内存的,因为Kafka设计就是躲避掉用JVM对象来保留数据,防止频繁full gc导致的问题,所以个别Kafka本身的JVM堆内存,调配个10G左右就够了,剩下的内存全副留给OS cache。

那服务器须要多少内存呢。咱们估算一下,大略有100个topic,所以要保障有100个topic的leader partition的数据在操作系统的内存里。100个topic,一个topic有5个partition。那么总共会有500个partition。每个partition的大小是1G(在上一篇中的日志分段存储中规定了.log文件不能超过1个G),咱们有2个正本,也就是说要把100个topic的leader partition数据都驻留在内存里须要1000G的内存。

咱们当初有5台服务器,所以均匀下来每天服务器须要200G的内存,然而其实partition的数据咱们没必要所有的都要驻留在内存外面,只须要25%的数据在内存就行,200G * 0.25 = 50G就能够了(因为在集群中的生产者和消费者简直也算是实时的,根本不会呈现音讯积压太多的状况)。所以一共须要60G(附带上刚刚的10G Kafka服务)的内存,故咱们能够筛选64G内存的服务器也行,大不了partition的数据再少一点在内存,当然如果可能提供128G内存那就更好。

CPU core

CPU布局,次要是看你的这个过程里会有多少个线程,线程次要是依靠多核CPU来执行的,如果你的线程特地多,然而CPU核很少,就会导致你的CPU负载很高,会导致整体工作线程执行的效率不太高,上一篇的Kafka的网络设计中讲过Kafka的Broker的模型。acceptor线程负责去接入客户端的连贯申请,然而他接入了之后其实就会把连贯调配给多个processor,默认是3个,然而个别生产环境倡议大家还是多加几个,整体能够晋升kafka的吞吐量比如说你能够减少到6个,或者是9个。另外就是负责解决申请的线程,是一个线程池,默认是8个线程,在生产集群里,倡议大家能够把这块的线程数量略微多加个2倍~3倍,其实都失常,比如说搞个16个工作线程,24个工作线程。

后盾会有很多的其余的一些线程,比如说定期清理7天前数据的线程,Controller负责感知和管控整个集群的线程,正本同步拉取数据的线程,这样算下来每个broker起码会有上百个线程。依据教训4个CPU core,一般来说几十个线程,在高峰期CPU简直都快打满了。8个CPU core,也就可能比拟拮据的撑持几十个线程忙碌的工作。所以Kafka的服务器个别是倡议16核,基本上能够hold住一两百线程的工作。当然如果能够给到32 CPU core那就最好不过了。

网卡

当初的网根本就是千兆网卡(1GB / s),还有万兆网卡(10GB / s)。kafka集群之间,broker和broker之间是会做数据同步的,因为leader要同步数据到follower下来,他们是在不同的broker机器上的,broker机器之间会进行频繁的数据同步,传输大量的数据。那每秒两台broker机器之间大略会传输多大的数据量?

高峰期每秒大略会涌入6万条数据,约每天解决10000个申请,每个申请50kb,故每秒约进来488M数据,咱们还有正本同步数据,故高峰期的时候须要488M * 2 = 976M/s的网络带宽,所以在高峰期的时候,应用千兆带宽,网络还是十分有压力的。