生产环境-kafka集群磁盘与节点数量规划方案
kafka集群生产次磁盘与节点数量规划方案
生产环境kafka集群部署方案如何规划呢?根据数据存储于处理的需求,我们主要需要从磁盘与吞吐量两个维度来考量
1. 磁盘方面
比如每天100G(一亿条1KB消息)业务数据需要传输到Kafka集群,那么kafka集群需要规划多大的存储空间呢?
1.1 业务数据规划
一般来说生产环境,kafka数据保留的时间起码为2周以上,而每条消息保存两份以上防止数据丢失,
那每天需要的空间大小为 100GB * 2 = 200GB
1.2 预留空间规划
预留的空间规划需要考虑以下几种情况的预留情况
1.2.1 kafka预留空间
kafka除了消息数据还有其他类型的数据,比如索引数据 这块可以预留10%的磁盘空间
1.2.2 磁盘预留空间
另在Linux系统中,ext2、ext3、ext4文件系统上通常会默认预留5%的磁盘空间,比如磁盘如果是3TB,这就意味着有150GB的空间会被预留下来,这样的话会不会显得有点浪费了。可以通过"tune2fs"命令来改变5%的默认设置,比如只预留1%的空间。但是不建议设成0%,现实环境中这样做不安全。
PS: 磁盘默认预留空间,这块在集群中需要格外注意,曾经在hadoop集群上就经历过这个坑,如果你设置的非hdfs空间小于或者等于系统默认预留值,那么磁盘将会被写爆!!!具体情况可以参考我的这篇文章大数据生产优化--HDFS预留空间正确使用姿势_Pushkin.的博客-CSDN博客
最终如果不考虑修改磁盘预留空间,采用磁盘默认配置的情况下,还需要预留5%的磁盘空间
1.2.3 其他服务预留空间
这块需要根据实际环境上的情况进行评估,建议生产kafka的集群不要部署其他的需要占用磁盘的应用了
1.3 磁盘空间最终评估
业务数据规划每天:100GB*2 = 200GB
kafka预留空间:200GB * 10% = 220GB
保存两周: 220GB * 14 = 大概3TB
最终磁盘的需求: 3TB + 5%的磁盘默认预留 = 考虑3.6TB的磁盘
当日kafka还支持数据压缩,这里先不考虑压缩比的情况
所以每天100GB的消息需求需要规划的空间为3.6TB
2. 吞吐量
吞吐量需求,假如生产环境需求1小时能传输1TB的消息数据
2.1 节点规划
对于 Kafka 这种通过网络大量进行数据传输的框架而言,带宽特别容易成为瓶颈。事实
上,在我接触的生产案例当中,带宽资源不足导致 Kafka 出现性能问题的比例至少占 60%
以上。如果你的环境中还涉及跨机房传输,那么情况可能就更糟了。
带宽也主要有两种:1Gbps 的千兆网络和 10Gbps 的万兆网络(注意是Gbps不是GBps),特别是千兆网络应该是一般公司网络的标准配置了。下面我就以千兆网络举一个实际的例子,来说明一下如何进行带宽资源的规划。
假设你公司的机房环境是千兆网络,即 1Gbps,现在你有个业务,其业务目标或 SLA 是在 1 小时内处
理 1TB 的业务数据。那么问题来了,你到底需要多少台 Kafka 服务器来完成这个业务呢?
一台节点的处理能力:
一台节点传输的能力 ===> 1Gbps * 70%(阈值) = 700Mb * 1/3(实际利用) = 244Mbps (其实也就大概只剩二三十兆MB/s了)
那么1小时内处理1TB数据所需要的机器数量?
1TB => 1000*1000*8 / 3600s = 每秒需要处理 2336Mb 的数据
2336 / 244 = 10台 * 3(备份) = 30台
那么1小时内处理100GB数据所需要的机器数量?
100GB = 100 * 1000 * 8 / 3600s = 222 Mb
222 / 244 = 1台 * 3(备份) = 3台
3. 最终规划
每天100GB业务量的数据消息,纯kafka的集群磁盘规划建议为3.6T磁盘空间,部署的节点建议为3个节点
另:生产环境的部署建议每个节点配置多个磁盘(数据盘建议直接挂载一个3.6T的磁盘),且kafka的数据盘要与系统盘不要混用,一定要隔离开。
更多推荐
所有评论(0)