生产环境需考量各种因素,结合自身业务需求而制定。看一些考虑因素(以下顺序,可是分了顺序的哦)
Kafka由Scala/Java编写,编译后源码是“.class”文件。部署到啥OS应该一样,但部署在Linux生产环境肯定最多,why?主要是如下方面更佳:
I/O模型,即os执行I/O指令的方法。主流的I/O模型:
Kafka Client 底层使用Java的selector,而selector在:
Kafka部署在Linux上更有优势,能获得更高效I/O性能。
Kafka生产和消费的消息都通过网络传输,但消息保存在磁盘。故Kafka需在磁盘、网络间进行大量数据传输。在Linux部署Kafka能享受到零拷贝技术带来的快速数据传输特性。
而Windows要等到Java 8的60更新版本才能有此福利。
社区对Windows平台上发现的Kafka Bug不做任何承诺。
建议普通机械硬盘:
主要优势:
但Kafka:
RAID优势就不明显了。
综上:
集群到底需要多大存储空间? Kafka需将消息保存在磁盘,这些消息默认会被保存一段时间,然后自动被删除。 虽然这段时间可配置,但应如何结合自身业务场景和存储需求来规划Kafka集群的存储容量?
假设业务
假设消息平均1KB,那Kafka集群需要为这个业务预留多少磁盘空间?
1亿 * 1KB * 2 / 1000 / 1000 = 200GB
规划磁盘容量时,需考虑:
普通以太网络,带宽主要两种:
其实贷款规划,就是规划所需Kafka服务器数量。假设机房千兆网络1Gbps,业务目标或SLA是在1h内处理1TB业务数据。需多少台Kafka服务器完成这业务?
带宽1Gbps,即每秒处理1Gb数据 假设每台Kafka服务器都是安装在专属机器,即每台Kafka机器上没有混入其他服务。通常你只能假设Kafka会用到70%带宽资源,因为总要为其他应用或进程留一些资源。
超过70%阈值就有网络丢包可能,故70%设定是合理值,即单台Kafka服务器最多也就能使用大约700Mb带宽。这只是它能使用的最大带宽资源,你不能让Kafka服务器常规就使用这么多资源,故通常再额外预留2/3资源,即
单台服务器使用带宽700Mb / 3 ≈ 240Mbps
有这240Mbps,计算1h内处理1TB数据所需的服务器数量。即每s处理2336Mb数据,除以240=10台服务器。 若消息还需额外复制两份,总服务器台数乘3=30台。
部署Kafka环境,一开始就要思考好实际场景下业务所需的集群环境,不能仅从单个维度上进行评估。
参考