本文主要讲解kafka集群磁盘与节点数量规划方案 几个节点?考虑的因素有哪些?
生产环境的kafka 需要结合业务、操作系统、磁盘、带宽来算
类型
|
涉及点
|
建议
|
操作系统
|
操作系统I/O模型
|
建议使用Linux
|
磁盘
|
磁盘I/O性能
|
普通机械盘即可 不搭RAID(有条件的可以使用固态硬盘)
|
磁盘容量
|
根据消息数 , 留存数据预估磁盘容量
|
预留 20 %-30% 的磁盘空间
|
带宽
|
根据实际带宽资源和业务SLA 预估服务器数
|
千兆 , 按 700 Mbps 计算 , 避免丢包
|
为什么要使用普通机械盘?
用机械磁盘:成本低且容量大,但易损坏,性价比高
用固态硬盘:成本高,高性能,性价比低
Kafka 用顺序读写,用机械磁盘性价比较高
磁盘空间考虑因素:
比如每天产生100G数据(一亿条1kB的消息)业务数据需要传输到Kafka集群,那么kafka集群需要规划多大的存储空间呢?
业务数据规划:
一般来说生产环境,kafka数据保留的时间起码为2周以上,而每条消息保存两份以上防止数据丢失(
这里补充一点 kafka默认副本为:1 ,参数:default.replication.factor;另外生产环境建议2副本以上)
那每天需要的空间大小为 100GB * 2 = 200GB
预留空间规划
预留的空间规划需要考虑以下几种情况的预留情况:
kafka预留空间
kafka除了消息数据还有其他类型的数据,比如索引数据 这块可以预留10%的磁盘空间
磁盘预留空间
在Linux系统中,ext2、ext3、ext4文件系统上通常会默认预留5%的磁盘空间
补充: 这个预留空间可以改 但是不建议。 只有在磁盘很大的情况下 才可以进行优化。
其他服务预留空间
建议生产kafka的集群不要部署其他的需要占用磁盘的应用了
采用单独挂盘的方式
磁盘空间最终评估
业务数据规划每天:100GB*2 = 200GB
kafka预留空间:200GB * 10% = 220GB
保存两周: 220GB * 14 = 大概3TB
最终磁盘的需求: 3TB + 5%的磁盘默认预留 = 考虑3.6TB的磁盘
补充:kafka还支持数据压缩,这里先不考虑压缩比的情况 如果有压缩比 计算公式: 压缩比 * 3 = xxx
所以每天100GB的消息需求需要规划的空间为3.6TB
吞吐量要求
吞吐量需求,假如生产环境需求1小时能传输1TB的消息数据
节点规划
Kafka 这种通过网络大量进行数据传输的框架而言,带宽特别容易成为瓶颈
以太网络的宽带:
* Kafka 的带宽容易成为瓶颈
* 1Gbps 的千兆网络 : 标配
* 10Gbps 的万兆网络
单位转换 :
* 带宽资源用: Mbps 单位
* 存储容量用 :MBps 单位
* 1 MBps = 8 Mbps
带宽也主要有两种:1Gbps 的千兆网络和 10Gbps 的万兆网络(注意是Gbps不是GBps),特别是千兆网络应该是一般公司网络的标准配置了。
下面以千兆网络举一个实际的例子,来说明一下如何进行带宽资源的规划
例子:机房环境是千兆网络 (1Gbps) ,在 1 小时内处理 1TB 数据,Kafka 只能用 70% 带宽
超过 70% 就有网络丢包风险,即:单台 Kafka 实例最多用 700Mb 带宽
一台节点传输的能力 ===> 1Gbps * 70%(阈值) = 700Mb * 1/3(实际利用) = 240Mbps (其实也就大概只剩二三十兆MB/s了)
那么1小时内处理1TB数据所需要的机器数量?
1TB => 1024 * 1024 * 8 / (60 * 60) = 每秒需要处理 2336Mb 的数据
2336 / 240 = 10台 ----- 秒需要处理 2336Mb 的数据 / kafka的带宽
要额外复制两份,
10 * 3 = 30 台
那么1小时内处理100GB数据所需要的机器数量?
100GB = 100 * 1000 * 8 / 3600s = 222 Mb
222 / 244 = 1台 * 3(备份) = 3台
综上所诉 需要注意的地方:
kafka每天产生业务数据是多少?
topic副本采用几副本方式?(生产环境建议2副本或以上)
kafka中的数据保留几天?
Kafka吞吐量要求 例如需要达到1小时消费多少数据?
kafka节点的磁盘带宽是多少?千兆网络还是万兆网络?