【kafka实践】04|Kafka线上部署方案

文章探讨了Kafka集群部署的关键要素,包括选择Linux操作系统的优势、I/O模型对性能的影响、Linux的零拷贝技术、磁盘类型选择、磁盘容量规划、以及带宽管理。特别强调了Linux作为首选平台的原因和Windows社区支持的局限性。
摘要由CSDN通过智能技术生成

首先线上肯定需要集群部署,单节点只适合日常开发测试。线上除了集群部署还需要考虑各种因素,结合业务来制定。下面分别从操作系统、磁盘、容量和带宽等方面来展开

目录

1、操作系统

1.1 I/O 模型

1.2 网络传输

1.3 社区支持

2、磁盘

3、容量

4、带宽


1、操作系统

虽然Kafka是基于跨平台的JVM系系统,但并不代表什么操作系统都适合,毫无疑问Linux是首选,从一下三个方面来看Linux 都更胜一筹。

  • I/O 模型
  • 网络传输
  • 社区支持
1.1 I/O 模型

众所周知有 5 种类型:阻塞式 I/O、非阻塞式 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。每种 I/O 模型都有各自典型的使用场景,比如 Java 中 Socket 对象的阻塞模式和非阻塞模式就对应于前两种模型;而 Linux 中的系统调用 select 函数就属于 I/O 多路复用模型; epoll 系统调用则介于第三种和第四种模型之间;第五种模型,暂时没有 Linux 系统支持,可以忽略。

不必了解每一种模型的实现细节,通常认为后一种模型会比前一种模型要高级,比如 epoll 就比 select 要好。I/O 模型与 Kafka 的是什么关系?实际上 Kafka 客户端底层使用了 Java 的 selector,selector 在 Linux 上的实现机制是 epoll,而 Windows 平台是通过 select实现。因此在这一点上将 Kafka 部署在 Linux 上是有优势的,能够获得更高效的 I/O 性能。

1.2 网络传输

Kafka 的消息都是通过网络传输的,而消息保存在磁盘。所以 Kafka 需要在磁盘和网络间进行大量数据传输。而 Linux下的零拷贝(Zero Copy)技术,就是当数据在磁盘和网络进行传输时避免昂贵的内核态数据拷贝从而实现快速的数据传输。所以在 Linux 部署 Kafka 能够享受到零拷贝技术所带来的快速数据传输特性。

1.3 社区支持

社区目前对 Windows 平台上发现的 Kafka Bug 不做任何承诺。只是口头上保证尽力去解决,但其实Windows 上的 Bug 一般是不会修复的。所以Windows 上部署 Kafka 只适合于开发测试,切记不要应用于生产环境。

2、磁盘

 Kafka 基于磁盘存储,磁盘性能无疑很重要的。在对 Kafka 集群进行磁盘规划时经常面对的问题是,我应该选择普通的机械磁盘还是固态硬盘?前者成本低且容量大,但易损坏;后者性能优势大,不过单价高。建议是使用普通机械硬盘即可。

Kafka 使用顺序读写操作,规避了机械磁盘随机读写操作慢的劣势。虽然 SSD 有性能优势,但从性价比上来说,机械磁盘物美价廉,而它因易损坏而造成的可靠性差等缺陷,又由 Kafka 在软件层面提供机制来保证,故使用普通机械磁盘是很划算的。

3、容量

磁盘容量规划是很重要的一点,举一个简单的例子来说明该如何思考这个问题。假设你所在公司有个业务每天需要向 Kafka 集群发送 1 亿条消息,每条消息保存两份以防止数据丢失,另外消息默认保存两周时间。现在假设消息的平均大小是 1KB,那么需要为这个业务预留多少磁盘空间呢?

我们来计算一下:每天 1 亿条 1KB 大小的消息,保存两份且留存两周的时间,那么总的空间大小就等于

1 亿 * 1KB * 2 / 1000 / 1000 = 200GB。

一般情况下 Kafka 集群除了消息数据还有其他类型的数据,比如索引数据等,故我们再为这些数据预留出 10% 的磁盘空间,因此总的存储容量就是 220GB。既然要保存两周,那么整体容量即为 220GB * 14,Kafka 支持数据的压缩,假设压缩比是 0.75,那么最后你需要规划的存储空间就是

200GB * 110% * 14 * 0.75  = 2.25TB。

规划磁盘容量时需要考虑这几个元素:

  • 新增消息数
  • 消息留存时间
  • 平均消息大小
  • 备份数
  • 是否压缩
4、带宽

对于 Kafka 这种通过网络大量进行数据传输的框架而言,带宽特别容易成为瓶颈。我们平时使用的都是普通的以太网络,带宽也主要有两种:1Gbps 的千兆网络和 10Gbps 的万兆网络,特别是千兆网络应该是一般公司网络的标准配置了。下面就以千兆网络举一个实际的例子,来说明一下如何进行带宽资源的规划。

假设你公司的机房环境是千兆网络,即 1Gbps,现在你有个业务,其业务目标或 SLA 是在 1 小时内处理 1TB 的业务数据。那么问题来了,你到底需要多少台 Kafka 服务器来完成这个业务呢?

让我们来计算一下,由于带宽是 1Gbps,即每秒处理 1Gb 的数据,假设每台 Kafka 服务器都是安装在专属的机器上,也就是说每台 Kafka 机器上没有混部其他服务,毕竟真实环境中不建议这么做。通常情况下你只能假设 Kafka 会用到 70% 的带宽资源,因为总要为其他应用或进程留一些资源。

根据实际使用经验,超过 70% 的阈值就有网络丢包的可能性了,故 70% 的设定是一个比较合理的值,也就是说单台 Kafka 服务器最多也就能使用大约 700Mb 的带宽资源。这只是它能使用的最大带宽资源,你不能让 Kafka 服务器常规性使用这么多资源,故通常要再额外预留出 2/3 的资源,即单台服务器使用带宽 700Mb / 3 ≈ 240Mbps。需要提示的是,这里的 2/3 其实是相当保守的,你可以结合你自己机器的使用情况酌情减少此值。

1 小时内处理 1TB 数据所需的服务器数量了。根据这个目标,我们每秒需要处理 2336Mb 的数据,除以 240,约等于 10 台服务器。如果消息还需要额外复制两份,那么总的服务器台数还要乘以 3,即 30 台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值