生产环境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的数据盘要与系统盘不要混用,一定要隔离开。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐