Kafka企业搭建之Kafka集群规划

1. 需求分析

因为我的公司是属于零售业务,我就拿电商平台来说

电商平台,假设每天有10亿请求都需要发送到kafka上面,28原则的话

10亿请求是通过24个小时来进行发送的,一般情况下,零点到早上8点这段时间是没有多大的数据量的,百分之80的请求都是需要另外的16个小时来进行

处理的,其实16个小时也并不是每个小时都是高峰,我们采用28原则,其实真正的高峰是有3个小时的,那么我们高峰qps也就是 5.5W

2. kafka物理机数量的评估

其实在生产环境中,像Kafka、MySQL、Hadoop等这些基础服务搭建的时候我们一般使用的都是物理机,那么我们搭建kafka的时候也应该选择物理机

我们根据场景来看,假如我们高峰期的请求是每秒5.5W个,那么我们其实1-2台服务器就可以搞定了,但是我们业务也是会有增长的,万一以后增长的话,我们机器不够了,那么别人会认为是你的评估不准确,这个时候我们一般评估会为QPS的4倍左右,当然这个是根据我们公司的情况来决定的,现在都流行开源节流,我们评估一台服务器都很困难,你去找领导汇报的时候要这么多集群肯定是不合适的,当然这个是根据自己的公司情况来看。我们先按照常规的来评估,我们每秒5W QPS那么4倍就是20W QPS 那么我们的集群的能力要规划到每秒20W的QPS,这个时候我们大概需要5台服务器就足够了,每一台都可以抗的住4万的请求

3. Kafka磁盘评估

SSD固态硬盘比较贵,普通的机械硬盘比较便宜,这个时候我们就需要来进行规划一下

SSD硬盘: 性能比较好指的是随机读写的性能比较好适合MySQL、Zookeeper这样的组件,价格贵

**SAS硬盘:**某方面性能不是很好,例如它的随机读写性能不是很好,但是顺序读写的性能比较好,比较便宜

根据我们对kafka的理解:

Kafka就是顺序写硬盘的,故我们选择普通的sas盘就可以了。

那么我们每台需要多少块硬盘呢?

假如我们一条消息1K,20W QPS,一台机器就是4T,那么一天就是20T,那么我们存储三天,应该是60T,其实kafka并不是立即删除数据,其实我们并不会

把所有的磁盘都写满,这个时候我们应该有冗余的数据,一般为磁盘的0.8为使用,这样我们每台服务器就需要75T数据,

那么一台机器挂10个硬盘一个硬盘8T应该是够用了 这样总共可以存储的数据为 400T

4. Kafka网络需求评估

千兆网卡: 1G/s

**万兆网卡:**10G/s

我们之前高峰期是每秒5.5W的请求,我们要为以后做考虑,那么就是每秒20W,这样每台机器4W的请求

这样的话,假设我们的数据最大一条是20KB,那么40000*20KB 其实很多公司都达不到20KB,

20KB * 4W = 781M每秒,那么我们kafka还有副本同步呢

781M * 2 = 1562 M

那么这个时候我们千M网卡肯定是已经不具备了,那么我们采用万兆网卡肯定是够的

5. Kafka 内存评估

5.1 我们先来看看我们kafka的写数据流程

image-20200801122716638

5.2 内存规划

我们可以发现kafka读写数据的流程都是基于os cache的 ,换句话说,我们的os cache无限大,那么整个kafka是不是就可以基于我们内存去操作

但是我们内存是有限的

kafka的设计,没有把很多数据结构都放在jvm里面,所以我们的这个jvm不需要太大的内存,和Namenode有点不一样因为Namenode的元数据例如目录树等是放在jvm的内存里面的

假设 10亿请求,一共有100个topic,假设100 topic 有 5个 partiiton 还有副本数2个

一个parition其实就是物理机上面的一个目录,这个目录下面会有很多个。log文件

其实log文件就是我们存储数据的文件,默认一个log文件是1G,我们如果要保证1000个partition的最新数据都是存在内存里面的话,

那么我们就需要1000G内存,那么哪里有这么多内存啊,我们只需要保证百分之25的最新数据在内存里面,

也就是说,我们有1000个文件,每个文件最新的一部分在内存里面就好了,这样的话

250M * 1000 paritiion = 250G内存

那么我们有5台机器 250G/5 = 50G内存,

我们还需要分给内存和系统 那么大概每台机器64G就差不多了

当然最好的情况下给128G内存,这样可以保证最新的百分之50在内存里面

6. Kafka CPU 评估

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

评估cpu是根据我们的服务器里面有多少线程

如果我们线程比较多吗,但是cpu core比较少,这样我们的机器的负载会很高,性能就会很不好

如果看过源码的话,那么我们应该知道每台服务端有几个线程大户

  1. Acceptor线程 1
  2. processor线程 3
  3. 处理请求的线程默认有 8个
  4. 定时清理的线程 拉取数据的线程 ISR线程等等

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

一些经验值:

cpu core = 4个的话, 几十个线程就把cpu打满了

cpu core = 8个的话,几十个线程能够轻松应对

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

cpu core 16个 如果可以的话,可以满足 当然 32个 core 当然最好

2C 8核 也行,当然4C 8核 最好

7. Kafka集群压力测试

https://www.cnblogs.com/xiao987334176/p/10075659.html

其他

  1. 有条件 zk 和 kafka部署分开
  2. ZK集群有条件的可以上SSD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值