03、Kafka实战:kafka线上集群部署方案

一.操作系统-Linux

  • Kafka是JVM系的大数据框架
  • kafka由Scala语言和Java语言编写而成,编译之后的源代码就是普通的".class"文件

使用Linux

  • kafka客户端底层使用Java的selector,selector在Linux上的实现机制是epoll,由于在windows上实现是select,因此部署在Linux上有优势,可以获得更高效的I/O性能。
  • 在Linux部署kafka能够享受到零拷贝技术所带来的 快速数据传输特性。

二.磁盘-普通机械磁盘

  • kafka大量使用磁盘,但是使用磁盘是顺序读写操作,一定程序规避机械磁盘的随机读写操作慢。
  • 机械磁盘物美价廉,易损坏等可靠性缺陷,由kafka在软件层面提供机制保证。

三.磁盘容量

需求:

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

问题:

  • 假设公司业务每天需要发送一亿条消息,每条消息保存两份以上防止数据丢失,
  • 另外消息默认保存两周时间。假设消息的平均大小是1kB,那么你能计算出kafka集群要预留多少磁盘空间吗?

计算:

  • 每天一亿条1kB大小的消息,且保存两份留存两周
  • 计算一天的空间大小:1亿*1KB*2=200GB
  • 一般情况下Kafka集群除了消息数据还有其他类型的数据,比如索引数据,我们需要预留出百分之10的磁盘空间,因此总的存储容量就是220GB
  • 保存两周,那就是220GB*14,大约为3TB左右
  • kafka支持的压缩比是0.75,那么最后规划需要的空间是0.75*3-2.25TB

规划磁盘容量考虑以下几个元素:

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

四.带宽

  • 与其说是带宽资源规划, 其实是规划所需kafka服务器的数量。

需求:

  • 公司的机场环境是千兆网络即1Gbps,现在有业务,业务目标是1小时处理1TB业务数据,那么需要多少台服务器完成业务:

计算:

  • 带宽是1Gbps,即每秒处理1Gb的数据,假设每台kafka服务器都是安装在专属的机器上,通常环境还是有其他服务,通常kafka只能用到百分70的带宽资源。
  • 实际使用经验,超过70%的阈值就有网络丢包可能性,故70%的设定是一个比较合理的值,也就是单台kafka服务器可能使用700mMb带宽资源。
  • 这只是它能使用的最大带宽资源,你不能让kafka服务器常规性使用这么多资源。通常额外预留2/3的资源,即单台服务器使用带宽700Mb/3=240Mbps。
  • 计算1小时处理1TB数据所需服务器数量。2336/240=10台,额外复制两份,需要30台。
因素 考量点 建议
操作系统 操作系统I/O模型 Linux
磁盘 磁盘I/O性能 机械磁盘
磁盘容量 消息数,留存时间预估 建议预留百分之20-30的磁盘资源
带宽 实际带宽资源预估 对于千兆网络按700Mps计算

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: