前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系

正文

方案背景

假设每天集群需要承载10亿数据。一天24小时,晚上12点到凌晨8点几乎没多少数据。

使用二八法则估计,也就是80%的数据(8亿)会在16个小时涌入,而且8亿的80%的数据(6.4亿)会在这16个小时的20%时间(3小时)涌入。

QPS计算公式=640000000÷(36060)=6万,也就是说高峰期的时候咱们的Kafka集群要抗住每秒6万的并发。

磁盘空间计算,每天10亿数据,每条50kb,也就是46T的数据。

保存2副本,46*2=92T,保留最近3天的数据。故需要 92 * 3 = 276T

QPS角度

部署Kafka,Hadoop,MySQL,大数据核心分布式系统,一般建议大家直接采用物理机,不建议用一些低配置的虚拟机。

QPS这个东西,不可能是说,你只要支撑6万QPS,你的集群就刚好支撑6万QPS就可以了。

假如说你只要支撑6w QPS,2台物理机绝对绝对够了,单台物理机部署kafka支撑个几万QPS是没问题的。

但是这里有一个问题,我们通常是建议,公司预算充足,尽量是让高峰QPS控制在集群能承载的总QPS的30%左右,所以我们搭建的kafka集群能承载的总QPS为20万~30万才是安全的。

所以大体上来说,需要5~7台物理机来部署,基本上就很安全了,每台物理机要求吞吐量在每秒几万条数据就可以了,物理机的配置和性能也不需要特别高。

磁盘角度

磁盘的数量

我们现在需要5台物理机,需要存储276T的数据,所以大概需要每台存储60T的数据,公司一般的配置是11块盘,这样的话,我们一个盘7T就搞定。

SAS盘还是SSD盘?

现在我们需要考虑一个问题:是需要SSD固态硬盘,还是普通机械硬盘?

SSD就是固态硬盘,比机械硬盘要快,那么到底是快在哪里呢?

其实SSD的快主要是快在磁盘随机读写,就要对磁盘上的随机位置来读写的时候,SSD比机械硬盘要快。

像比如说是MySQL这种系统,就应该使用SSD了。

比如说我们在规划和部署线上系统的MySQL集群的时候,一般来说必须用SSD,性能可以提高很多,这样MySQL可以承载的并发请求量也会高很多,而且SQL语句执行的性能也会提高很多。

Kafka集群,物理机是用昂贵的SSD呢?还是用普通的机械硬盘呢?

因为写磁盘的时候kafka是顺序写的。

机械硬盘顺序写的性能机会跟内存读写的性能是差不多的,所以对于Kafka集群来说我们使用机械硬盘就可以了。

内存角度

kafka自身的jvm是用不了过多堆内存的,因为kafka设计就是规避掉用jvm对象来保存数据,避免频繁fullgc导致的问题,所以一般kafka自身的jvm堆内存,分配个10G左右就够了,剩下的内存全部留给os cache。

那服务器需要多少内存够呢?

我们估算一下,大概有100个topic,所以要保证有100个topic的leader partition的数据在os chache里。

100个topic,一个topic有5个partition。那么总共会有500个partition。

每个partition的大小是1G,我们有2个副本,也就是说要把100个topic的leader partition数据都驻留在内存里需要1000G的内存。

我们现在有5台服务器,所以平均下来每天服务器需要200G的内存,但是其实partition的数据我们没必要所有的都要驻留在内存里面,只需要25%的数据在内存就行,200G * 0.25 = 50G就可以了。

所以一共需要60G的内存,故我们可以挑选64G内存的服务器也行,大不了partition的数据再少一点在内存,当然如果是128G内存那就更好。

需要多少CPU?

CPU规划,主要是看你的这个进程里会有多少个线程,线程主要是依托多核CPU来执行的,

如果你的线程特别多,但是CPU核很少,就会导致你的CPU负载很高,会导致整体工作线程执行的效率不太高,

在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的网络带宽,所以在高峰期的时候,使用千兆带宽,网络还是非常有压力的。

总结:推荐的Kafka集群配置

10亿数据,6w/s的吞吐量,276T的数据,5台物理机
硬盘:11(SAS) * 7T,7200转
内存:64GB/128GB,JVM分配10G,剩余的给os cache
CPU:16核/32核
网络:千兆网卡,万兆更好

Kafka 的线上集群部署方案是怎样的?相关推荐

  1. kubeadm 线上集群部署(四) k8s node 节点初始化安装

    线上curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/lvm.sh |bash mkdir -p /data/kubelet ln ...

  2. 私有云办公平台大规模集群/企业级集群/小型工作室集群解决方案:NextCloud集群部署方案--NextCloud集群架构设计

    原作者:NextCloud文档库 转载来源:https://docs.nextcloud.com/server/11/admin_manual/installation/deployment_reco ...

  3. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...

    前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...

  4. K8S实战:Centos7上集群部署

    K8S实战:Centos7上集群部署 更多技术类博文,请关注微信公众号:运维之美. 集群架构 k8s集群的架构 master节点:etcd,api-server,scheduler,controlle ...

  5. RocketMQ集群部署方案(DLedger)

    RocketMQ集群部署方案(DLedger) 一.基本配置 1.准备三台虚拟机,root密码 root ;IP地址: 192.168.xxx.xxx worker1 192.168.xxx.xxx ...

  6. Nacos集群部署方案

    1. 介绍 生产环境部署nacos使用集群部署方案cluster来保障高可用 2. 集群部署架构图 nacos官方推荐把所有服务列表放到VIP下面,然后挂到一个域名下面 http://ip1:port ...

  7. Nacos生产环境集群部署方案

    1.介绍 生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用. 2.集群部署架构图 nacos 官方推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面 http://i ...

  8. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  9. clickhouse集群部署方案分析

    常见的三种集群架构方案 注:本文摘自网上内容,原文地址:https://zhuanlan.zhihu.com/p/161242274 ClickHouse分布式集群常见方案一:MergeTree + ...

最新文章

  1. python数据分析张俊红_关于数据分析我们来聊聊Python
  2. 通讯录javafx和mysql_用javafx实现通讯录
  3. Python Revisited Day 07 (文件处理)
  4. MIT 18.03 写给初学者的微积分校对活动 | ApacheCN
  5. 【资源】吴恩达新书《Machine Learning Yearning》完整中文版免费下载
  6. 监测UITextField的变化
  7. 公安部起草《“十三五”平安中国建设规划》并公开征求意见
  8. Subarray Sum K
  9. SQL Server 2008支持将数据导出为脚本 / 导出单张表
  10. LSTM神经网络详解
  11. udc分类号查询 计算机技术,论文的分类号和udc_udc_论文分类号查询系统
  12. Qt 常用文件对话框及消息对话框使用
  13. QT5编译android安卓程序的sdk安装问题 android sdk manager
  14. perforce(p4)相关问题
  15. 项目管理如何与甲方沟通
  16. ubuntu从一个单纯的系统到装上自己需要的一些软件的过程
  17. 请教双WAN口路由器设置
  18. python音频转数组_python音频处理的示例详解
  19. [PB] PB中读写文件通用的两个函数
  20. 在Python中使用StanfordOpenIE

热门文章

  1. [Bevdet4D]转Onnx以及转Tensorrt(一)
  2. 高质量鉴定胚胎干细胞(ESCs)标志物抗体
  3. 网站性能优化实战—从12.67s到1.06s的故事
  4. 深入剖析!什么是Redis缓存雪崩、缓存穿透和缓存击穿?内容太过真实
  5. poj 2771 有点难度最大独立集
  6. nginx代理静态资源
  7. 微众银行开源联盟链可信预言机Truora,搭建数据可信上链桥梁
  8. 基于U-Net的递归残差卷积神经网络在医学图像分割中的应用
  9. http请求报文详解
  10. jquery.print.js 网页局部打印 横向打印 去掉页眉页脚