您当前的位置: 首页 >  kafka

水的精神

暂无认证

  • 2浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

kafka实战——如何选择线上环境

水的精神 发布时间:2021-08-07 11:09:53 ,浏览量:2

  所谓线上部署环境,其实无非就是操作系统的选择,以及存储介质磁盘的选择,内存大小的选择,cpu的选择,网络带宽的选择。

  除了操作系统意外,剩下的影响因子任何一个到了瓶颈,都相当于是短板,将会制约整体性能的发挥。

   其实不光是部署kafka要考虑这些因素。部署其他的也是一样从这几个点出发,来考虑究竟应该如何选择环境。

如何择操作系统

  这里简单的说一下kafka原理,之所以kafka有着极高的吞吐量,和kafka的写入速度以及读的速度有很大的关系。同样都是写磁盘,为啥kafka就能做到这么快呢?

  实际上消息队列有一个现象,就是顺序的写入,以及顺序的读取。中间不会对数据有什么修改操作。这样以来,实际上可以对磁盘顺序访问。并且kafka是把数据写到了操作系统的页缓存中。kafka读取消息首先尝试从页缓存中读取,如果命中直接把消息发送到网络的Socket上。这个过程是利用linux系统的内核级函数 sendFile做到的。而sendFile就是系统为我们提供实现零拷贝的函数。

  想要用到这一个优化,我们最好选择主流的linux环境来部署kafka。

  如果你还有疑问,我使用windows怎么了,有什么问题?我这里再多解释一下:kafka新版的clients再和解底层网络库时采用了Java的Selector机制,这在linux下对用的是epoll,而在windows上,java的Selector是使用的select模型,而不是多路复用。部署在linux相比window下可以获得更好的IO性能。

如何选择磁盘呢

   其实就几个关键的问题:

  •   机械硬盘 or 固态硬盘
  •   组不组磁盘矩阵 也就是 DAID 0
  •   磁盘容量大小问题
机械硬盘 or 固态硬盘

  先说一下固态硬盘优势所在:相比机械硬盘它的寻道时间更短。当然这个就是是针对随机访问磁盘这个场景的。再多说一点,机械硬盘是通过磁头旋转来找到数据的,而固态硬盘没有这个过程。机械硬盘和固态硬盘的对比 

  根据kafka的存储原理,它用到了是磁盘的顺序读。正是这一点,kafka规避掉了机械硬盘在随机读的劣势。因此,部署kafka 的机器实际上,使用普通机械硬盘就足够了。

  如果想要有更好的突破,愿意承担固态硬盘的成本的话。固态硬盘是更好的选择。

组不组磁盘矩阵 也就是 DAID 0

  不组磁盘矩阵也是可以的。

  组磁盘矩阵的好处是可以冗余数据,一定程度上可以避免数据的丢失。可以提供天然的数据负载均衡。但是kafka本身就为我们提供了数据负载均衡,以及避免数据丢失的机制。其实就是数据副本以及partition。

  另外有一个小技巧,可以为我们的kafka节点配置多个日志路径,并且每个日志路径单独挂在不同的磁盘上,这样可以让多块磁盘磁头同时工作,可以加速kafka的生成消息的速度。

磁盘容量问题

  这个要根据公式:估算出容量大小,压缩比例是需要开启压缩配置的。另外还需要多出来百分10的磁盘空间用于系统产生的数据文件。

 生产消息的速度 * 单条消息的大小*消息保留的时间*副本的个数 * 压缩比例 

关于CPU选择

  kafaka 是IO密集型的应用,如果要为了节省消息传输占用的带宽,可以开启压缩。如果开启压缩,就要用到额外的CPU。

  kafka最好配置 8核以上,如果开启压缩,则更多核心数。

关于带宽

  实际上在带宽一定的情况下,我们应该合理的根据需求估算出kafka节点的个数。

  举个栗子(这个栗子是:《kafka实战》这本书中的)

  如果业务需求时一个小时1T消息,我们网络带宽是 1Gb/s。一般情况下,不要把kafka和其他服务部署在一起。kafka对带宽的占用是非常高的,毕竟是用来做实时传输的。kafka一般使用百分之七十的带宽,这个具体值可以再根据实际情况去压测。防止在高带宽情况下丢包。这是在资源到达极限的情况下的占用,我们还要考虑到突发情况,万一流量倍增。我们可以预留三倍的增长流量增长空间。也就是1Gb * 0.7 * 0.33 约等于240Mb。在1Gb/s 的带宽下,240M/s 就是单个kafka节点的处理能力。其中我们预留出来了三倍的突发流量增长空间,也就是我们只用了三分之一的带宽。 每小时1T的业务数据,换算成秒就是  1T / 3600 约等于 2336Mb/s 。再根据我们单台kafka节点的处理能力,实际上我们差不多需要10个kafka节点,才能,满足每个小时1T的业务流量的需求。 

  另外避免多机房组成服务机集群。

最后来一个典型的环境案例:

cpu 24核

内存32G

磁盘 1TB 

带宽1Gb/s

读书笔记,内容来源于《kafka实战》

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0379s