Kafka实战(七) - 优雅地部署 Kafka 集群

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: Kafka实战(七) - 优雅地部署 Kafka 集群

既然是集群,必然有多个Kafka节点,只有单节点构成的Kafka伪集群只能用于日常测试,不可能满足线上生产需求。

真正的线上环境需要考量各种因素,结合自身的业务需求而制定。看一些考虑因素(以下顺序,可是分了顺序的哦)

1 操作系统 - OS


可能你会问Kafka不是JVM上的大数据框架吗?Java又是跨平台的语言,把Kafka安装到不同的操作系统上会有什么区别吗?

区别相当大!


确实,Kafka由Scala/Java编写,编译后源码就是“.class”文件。

本来部署到哪个OS应该一样,但是不同OS的差异还是给Kafka集群带来了相当大的影响。

毋庸置疑,部署在Linux上的生产环境是最多的。


考虑操作系统与Kafka的适配性,Linux系统显然要比其他两个特别是Windows系统更加适合部署Kafka。可具体原因你能谈笑风生吗?


1.1 I/O模型

I/O模型可以近似认为I/O模型就是OS执行I/O指令的方法。

主流的I/O模型通常有5种类型:


  1. 阻塞式I/O
    e.g. Java中Socket的阻塞模式
  2. 非阻塞式I/O
    e.g. Java中Socket的非阻塞模式
  3. I/O多路复用
    e.g. Linux中的系统调用select函数
  4. 信号驱动I/O
    e.g. epoll系统调用则介于第三种和第四种模型之间
  5. 异步I/O
    e.g. 很少有Linux支持,反而Windows系统提供了一个叫IOCP线程模型属于该类


我在这里不详细展开每一种模型的实现细节,因为那不是本文重点。


言归正传,I/O模型与Kafka的关系几何?

Kafka Client 底层使用了Java的selector,而selector

  • 在Linux上的实现机制是epoll
  • 在Windows平台上的实现机制是select


因此在这一点上将Kafka部署在Linux上是有优势的,能够获得更高效的I/O性能。

1.2 数据网络传输效率

Kafka生产和消费的消息都是通过网络传输的,而消息保存在哪里呢?

肯定是磁盘!

故Kafka需要在磁盘和网络间进行大量数据传输。

Linux有个零拷贝(Zero Copy)技术,就是当数据在磁盘和网络进行传输时避免昂贵内核态数据拷贝从而实现快速数据传输。Linux平台实现了这样的零拷贝机制,但有些令人遗憾的是在Windows平台上必须要等到Java 8的60更新版本才能“享受”到。


一句话,在Linux部署Kafka能够享受到零拷贝技术所带来的快速数据传输特性带来的极致快感。


1.3 社区生态

社区目前对Windows平台上发现的Kafka Bug不做任何承诺。因此,Windows平台上部署Kafka只适合于个人测试或用于功能验证,千万不要应用于生产环境。


2 磁盘

2.1 灵魂拷问:机械硬盘 or 固态硬盘

  • 前者便宜且容量大,但易坏!
  • 后者性能优势大,但是贵!

建议是使用普通机械硬盘即可。

  • Kafka虽然大量使用磁盘,可多是顺序读写操作,一定程度上规避了机械磁盘最大的劣势,即随机读写慢。从这一点上来说,使用SSD并没有太大性能优势,机械磁盘物美价廉
  • 而它因易损坏而造成的可靠性差等缺陷,又由Kafka在软件层面提供机制来保证


2.2 是否应该使用磁盘阵列(RAID)

使用RAID的两个主要优势在于:

  • 提供冗余的磁盘存储空间
  • 提供负载均衡

不过就Kafka而言

  • Kafka自己实现了冗余机制提供高可靠性
  • 通过分区的设计,也能在软件层面自行实现负载均衡


如此说来RAID的优势也就没有那么明显了。虽然实际上依然有很多大厂确实是把Kafka底层的存储交由RAID的,只是目前Kafka在存储这方面提供了越来越便捷的高可靠性方案,因此在线上环境使用RAID似乎变得不是那么重要了。

综上,追求性价比的公司可以不搭建RAID,使用普通磁盘组成存储空间即可。使用机械磁盘完全能够胜任Kafka线上环境。


2.3 磁盘容量

集群到底需要多大?

Kafka需要将消息保存在磁盘上,这些消息默认会被保存一段时间然后自动被删除。

虽然这段时间是可以配置的,但你应该如何结合自身业务场景和存储需求来规划Kafka集群的存储容量呢?


假设有个业务

  • 每天需要向Kafka集群发送1亿条消息
  • 每条消息保存两份以防止数据丢失
  • 消息默认保存两周时间


现在假设消息的平均大小是1KB,那么你能说出你的Kafka集群需要为这个业务预留多少磁盘空间吗?

计算:

  • 每天1亿条1KB的消息,存两份
    1亿 * 1KB * 2 / 1000 / 1000 = 200GB
  • 一般Kafka集群除消息数据还存其他类型数据,比如索引数据
    再为其预留10%磁盘空间,因此总的存储容量就是220GB
  • 要存两周,那么整体容量即为
    220GB * 14,大约3TB
  • Kafka支持数据的压缩,假设压缩比是0.75
    那么最后规划的存储空间就是0.75 * 3 = 2.25TB


总之在规划磁盘容量时你需要考虑下面这几个元素:


  • 新增消息数
  • 消息留存时间
  • 平均消息大小
  • 备份数
  • 是否启用压缩


3 带宽

对于Kafka这种通过网络进行大数据传输的框架,带宽容易成为瓶颈。

普通的以太网络,带宽主要有两种:1Gbps的千兆网络和10Gbps的万兆网络,特别是千兆网络应该是一般公司网络的标准配置了

以千兆网络为例,说明带宽资源规划。


真正要规划的是所需的Kafka服务器的数量。

假设机房环境是千兆网络,即1Gbps,现在有业务,其目标或SLA是在1小时内处理1TB的业务数据。

那么问题来了,你到底需要多少台Kafka服务器来完成这个业务呢?


计算

带宽1Gbps,即每秒处理1Gb数据

假设每台Kafka服务器都是安装在专属机器,即每台Kafka机器上没有混入其他服务

通常情况下你只能假设Kafka会用到70%的带宽资源,因为总要为其他应用或进程留一些资源。超过70%的阈值就有网络丢包可能性,故70%的设定是一个比较合理的值,也就是说单台Kafka服务器最多也就能使用大约700Mb带宽。


这只是它能使用的最大带宽资源,你不能让Kafka服务器常规性使用这么多资源,故通常要再额外预留出2/3的资源,即

单台服务器使用带宽700Mb / 3 ≈ 240Mbps

这里的2/3其实是相当保守的,可以结合机器使用情况酌情减少该值


有了240Mbps,可以计算1小时内处理1TB数据所需的服务器数量了。

根据这个目标,每秒需要处理2336Mb的数据,除以240,约等于10台服务器。

如果消息还需要额外复制两份,那么总的服务器台数还要乘以3,即30台。


总结

与其盲目上马一套Kafka环境然后事后费力调整,不如在一开始就思考好实际场景下业务所需的集群环境。在考量部署方案时需要通盘考虑,不能仅从单个维度上进行评估。


参考

  • Linux内核模型架构
  • Kafka核心技术与实战




目录
相关文章
|
2月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
201 7
|
5月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
在数字化转型中,企业亟需从海量数据中快速提取价值并转化为业务增长动力。5月15日19:00-21:00,阿里云三位技术专家将讲解Kafka与Flink的强强联合方案,帮助企业零门槛构建分布式实时分析平台。此组合广泛应用于实时风控、用户行为追踪等场景,具备高吞吐、弹性扩缩容及亚秒级响应优势。直播适合初学者、开发者和数据工程师,参与还有机会领取定制好礼!扫描海报二维码或点击链接预约直播:[https://developer.aliyun.com/live/255088](https://developer.aliyun.com/live/255088)
416 35
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
|
5月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
192 13
|
5月前
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
441 10
|
11月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
584 5
|
11月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
355 4
|
6月前
|
消息中间件 运维 Java
搭建Zookeeper、Kafka集群
本文详细介绍了Zookeeper和Kafka集群的搭建过程,涵盖系统环境配置、IP设置、主机名设定、防火墙与Selinux关闭、JDK安装等基础步骤。随后深入讲解了Zookeeper集群的安装与配置,包括数据目录创建、节点信息设置、SASL认证配置及服务启动管理。接着描述了Kafka集群的安装,涉及配置文件修改、安全认证设置、生产消费认证以及服务启停操作。最后通过创建Topic、发送与查看消息等测试验证集群功能。全网可搜《小陈运维》获取更多信息。
540 1
|
7月前
|
消息中间件 人工智能 安全
秒级灾备恢复:Kafka 2025 AI自愈集群下载及跨云Topic迁移终极教程
Apache Kafka 2025作为企业级实时数据中枢,实现五大革新:量子安全传输(CRYSTALS-Kyber抗量子加密算法)、联邦学习总线(支持TensorFlow Federated/Horizontal FL框架)、AI自愈集群(MTTR缩短至30秒内)、多模态数据处理(原生支持视频流、3D点云等)和跨云弹性扩展(AWS/GCP/Azure间自动迁移)。平台采用混合云基础设施矩阵与软件依赖拓扑设计,提供智能部署架构。安装流程涵盖抗量子安装包获取、量子密钥配置及联邦学习总线设置。
|
10月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
2250 1
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点

热门文章

最新文章