2.kafka 选择和集群部署规划

Posted 文大侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.kafka 选择和集群部署规划相关的知识,希望对你有一定的参考价值。

kafka有不同的发行版和版本号,部署时选择什么样的硬件等都决定kafka不同的特性和性能,在正式上线前通常需要考虑如下选择:

发行版本选择

当kafka作为一个开源框架有自己的一套生态,不仅有原生的kafka框架,也有开源公司在社区版本基础上扩展开发的发行版,相比来说提供的功能更多,使用更加友好,但是定制性下降,目前主流版本如下:

  1. Apache Kafka

kafka的社区发行版,最正宗,大公司一般在此基础上定制自己的版本,但是特性相比较少,比如缺少自带的集群监控系统,个人用适用于简单流处理场合。另外,多提下,如果使用社区版kafka,一般使用开源第三方监控系统,如kafka-monitor/kafka-eagle/kafka-manager,推荐kafka-manager,如果想实现更加精细的监控可使用JMXTrans + InfluxDB + Grafana

  1. Confluent Kafka

Confluent是Kafka的几个创始人创建的公司,专注于Kafka的企业级解决方案。目前分为免费版和企业版两种:

  • 免费版包含 Schema 注册中心和 REST proxy 两大功能以及更多的连接器。前者是帮助你集中管理 Kafka 消息格式以实现数据前向 / 后向兼容;后者用开放 HTTP 接口的方式允许你通过网络访问 Kafka 的各种功能。
  • 企业版,它提供的功能非常多,最有用的当属跨数据中心备份和集群监控两大功能了,多个数据中心之间数据的同步以及对集群的监控历来是 Kafka 的痛点。

Confluent的缺点在于高级功能收费,国内生态不发达,中文文档较少,普及率比较低。

  1. CDH/HDP Kafka

Cloudera的CDH/Hortonworks的HDP是两家大数据平台,集成了主流的大数据框架,实现全方位的数据处理,目前两家公司已经合并,以后说不定两个产品会合并。CDH/HDP 都集成了Kafka,通过便捷化的界面操作将 Kafka 的安装、运维、管理、监控全部统一在控制台中,全部UI操作,不需要命令行,非常方便。

适合小公司和创业公司部署使用,缺点在于绑定的Kafka版本有滞后,且降低了对Kafka集群的掌控。

版本号选择

Kafka 版本号由 3 个部分构成,即“大版本号- 小版本号 - Patch 号”,比如0.10.2.2,大版本0.10,小版本2,打了两个补丁,patch号为2。Kafka本身在演进,引入越来越多特性的固然很好,但是新特性都需要一段时间才能稳定,因此了解演进过程有助于更好的版本选择:

  • 0.8 尽量升级到0.8.2.2,老版本Consumer API稳定,引入新Producer API不稳定
  • 0.9 增加了基础的安全认证 / 权限功能,新Producer API稳定,引入新Consumer API非常不稳定
  • 0.10 尽量升级到0.10.2.2,新Consumer API稳定,引入Kafka Streams不要线上使用
  • 0.11 目前国内主流版本,尽量升级到0.11.0.3,消息引擎非常完善,各大组件非常完善,,引入了两个重量级的功能变更:一个是提供幂等性 Producer API 以及事务(Transaction) API;另一个是对 Kafka 消息格式做了重构,注意客户端格式的兼容。
  • 1.0-2.0 主要改进在于Kafka Streams,如果使用Kafka Streams,尽量升级到这两个版本。

集群部署规划

部署主要考虑系统和硬件,综合如下

  1. 操作系统

主流推荐Linux,社区支持比Windows/Mac好,且依赖Linux上Java I/O epoll异步模型和零拷贝技术,可以获得更好的性能。

  1. 磁盘类型

Kafka磁盘上顺序读写,规避了机械磁盘随机读写慢的问题,一般使用机械磁盘就够了,不差钱使用SSD更好。

RAID提供的冗余和负载均衡,Kafka层面通过副本和分区都已经实现,没有必要。

  1. 磁盘容量

磁盘容量和如下因素有关:

  • 每日消息数
  • 每条消息平均大小
  • 消息副本数
  • 消息保存时间
  • 是否启用压缩

比如,每天 1 亿条 1KB 大小的消息,2个副本且留存两周的时间,那么每天总的空间大小就等于 1 亿 * 1KB * 2 / 1000 / 1000 = 200GB。一般情况下 Kafka 集群除了消息数据还有其他类型的数据,比如索引数据等,故我们再为这些数据预留出 10% 的磁盘空间,因此总的存储容量就是200*1.1 = 220GB。既然要保存两周,那么整体容量即为 220GB * 14,大约 3TB 左右。Kafka 支持数据的压缩,假设压缩比是 0.75,那么最后需要规划的存储空间就是 0.75 * 3 = 2.25TB。

因此假设每台机器磁盘500G,需要机器至少 2250/500 ~= 5台机器

  1. 网络带宽

一般Kafka集群的瓶颈都在网络带宽,假设使用千兆网(网速1Gbps=1000Mbps=100MBps,注意大B和小b的区别),SLA为每小时处理1T数据(1T/3600=277MBps),这里给出一种简单评估集群网络带宽的方法:

网卡一般最多使用70%(保守可按50%),为非业务资源预留2/3(比如副本同步等),所有单台机器最大使用带宽为1000.71/3=23.3MBps,所大概需要277/23.3=10台机器。

如果再考虑使用两个Follower副本,总共则需要30台机器

这里的SLA评估我们需要考虑到入流量和出流量,一般瓶颈在出流量,比如写流量50MBps,但是同时有4个消费组消费,那么出流量是50*4=200MBps,因此SLA是200MBps。

原创,转载请注明来自

以上是关于2.kafka 选择和集群部署规划的主要内容,如果未能解决你的问题,请参考以下文章

Kafka-集群部署

Kafka

Kafka

Kafka

kafka

kafka