Kafka系统 - 硬件资源规划

2024-04-16 09:38

本文主要是介绍Kafka系统 - 硬件资源规划,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:《Apache Kafaka 实战》

前言

主要包括以下几个方面

  • 磁盘类型
  • 磁盘容量
  • CPU
  • 内存
  • 带宽
  • 其他配置优化

1. 磁盘类型

1.1 机械硬盘 与 固态硬盘 选择?

机械硬盘,性价比高,完全可以满足集群的使用

固态硬盘,有钱就上

1.2 一堆普通磁盘(JBOD) 与 磁盘整列(RAID) 选择?

JBOD,性价比高,使用没有问题

RAID,有钱就上,提供冗余的数据存储空间,天然负载均衡

2. 磁盘容量规划

Kafka的每条消息都保存在实际的物理磁盘中,消息默认会被broker保存一段时间之后清除。

计算关键因素:每天消息数量,平均消息大小,消息留存时间,副本数,是否启用压缩,预留磁盘空间

2.1 场景计算
  • (1) 每天1亿条信息 x 保存2份 x 平均一条消息大小1KB / 1000 / 1000 = 200GB 磁盘空间
  • (2) 预留空间,其他数据文件存储约10%的磁盘空间,200GB + 20GB = 220GB
  • (3) 保存一周的时间,220GB x 7 ~= 1.5TB
  • (4) 开启压缩,平均压缩比假设0.5,1.5TB x 0.5 = 0.75TB

3. 内存规划

除了消息会存在磁盘来说,同时消息还会有缓存,具体就是操作系统的页缓存(page cache)

3.1 结论
  • (1) 尽量分配跟多的内存给操作系统的page cache
  • (2) 不要为broker设置过大的堆内存,最好不要超过6G
  • (3) page chache大小至少要大于一个日志段的大小

4. CPU

Kafka 不是计算密集型的系统,追求多核而非高时钟频率。

但是如果client端启用了消息压缩,除了必要的CPU资源外,broker端也有可能需要大量的CPU资源。但是Kafka 0.10.0.0改进了broker端的消息处理,需要注意消息版本号匹配即可。

4.1 结论
  • (1) 多核系统,CPU核数最好大于8
  • (2) clients端核broker端消息版本一致,且版本高于0.10.0.0。否则需要多配置一些资源

5. 带宽规划

Kafka是在网络间传输大量数据的分布式数据管道,带宽资源很重要,并且容易成为瓶颈

5.1 场景计算

假设用户网络环境中的带宽是1Gb/s,用户的业务目标是每天1小时处理1TB的业务消息,那么需要多少台机器呢?

  • 1GB x 分配70%宽带资源 ~= 710Mb/s (kafka单台broker的带宽)
  • 710MB/s x 使用1/3的资源防止突发情况 ~= 240Mb/s (这个1/3,可以提高一点)
  • 1TB 1h = 292MB 1s = 2336Mb / 240Mb ~= 10台 x 2个副本 = 20 台
5.2 结论
  • (1) 尽量使用高速网络
  • (2) 根据网络条件和业务情况评估集群数量
  • (3) 避免使用跨机房网络

6. 其他优化配置

  • 使用最新版本的Kafka,且支持Kafka Stream
  • 推荐为每个broker配置多个日志路径,每个路径都独立挂载在不同的磁盘上,极大加速Kafka消息产生的速度

这篇关于Kafka系统 - 硬件资源规划的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908433

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

浅谈MySQL的容量规划

《浅谈MySQL的容量规划》进行MySQL的容量规划是确保数据库能够在当前和未来的负载下顺利运行的重要步骤,容量规划包括评估当前资源使用情况、预测未来增长、调整配置和硬件资源等,感兴趣的可以了解一下... 目录一、评估当前资源使用情况1.1 磁盘空间使用1.2 内存使用1.3 CPU使用1.4 网络带宽二、

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默