前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kafka实战(7)-究竟该如何部署Kafka集群?

Kafka实战(7)-究竟该如何部署Kafka集群?

作者头像
JavaEdge
发布2022-11-30 15:26:13
4240
发布2022-11-30 15:26:13
举报
文章被收录于专栏:JavaEdge

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

1 OS

Kafka由Scala/Java编写,编译后源码是“.class”文件。部署到啥OS应该一样,但部署在Linux生产环境肯定最多,why?主要是如下方面更佳:

1.1 I/O模型

I/O模型,即os执行I/O指令的方法。主流的I/O模型:

  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系统调用,介于第3、4种模型
  5. 异步I/O e.g. 很少有Linux支持,Windows系统提供IOCP线程模型

Kafka Client 底层使用Java的selector,而selector在:

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

Kafka部署在Linux上更有优势,能获得更高效I/O性能。

1.2 网络传输效率

Kafka生产和消费的消息都通过网络传输,但消息保存在磁盘。故Kafka需在磁盘、网络间进行大量数据传输。在Linux部署Kafka能享受到零拷贝技术带来的快速数据传输特性。

而Windows要等到Java 8的60更新版本才能有此福利。

1.3 生态

社区对Windows平台上发现的Kafka Bug不做任何承诺。

2 磁盘

2.1 机械硬盘 or SSD

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

建议普通机械硬盘:

  • Kafka虽大量使用磁盘,可大多是顺序读写,一定程度规避机械磁盘最大劣势:随机读写慢。使用SSD并无太大性能优势,机械磁盘物美价廉
  • 易损坏而造成的可靠性差等缺陷,由Kafka在软件层面提供机制保证

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

主要优势:

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

但Kafka:

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

RAID优势就不明显了。

综上:

  • 追求性价比的公司可不搭建RAID,使用普通磁盘组成存储空间即可
  • 机械磁盘完全能够胜任

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 带宽

普通以太网络,带宽主要两种:

  • 1Gbps千兆网络(主流)
  • 10Gbps万兆网络

其实贷款规划,就是规划所需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台。

4 总结

部署Kafka环境,一开始就要思考好实际场景下业务所需的集群环境,不能仅从单个维度上进行评估。

参考

  • Linux内核模型架构
  • Kafka核心技术与实战
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 OS
    • 1.1 I/O模型
      • 1.2 网络传输效率
        • 1.3 生态
        • 2 磁盘
          • 2.1 机械硬盘 or SSD
            • 2.2 是否应使用磁盘阵列(RAID)
              • 2.3 评估磁盘容量
              • 3 带宽
                • 计算
                • 4 总结
                相关产品与服务
                负载均衡
                负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档