专栏名称: About云
about云-为热爱云开发技术人员提供最全面的信息传播和服务平台
目录
相关文章推荐
保险一哥  ·  AI会取代百万保险代理人吗?请看deepse ... ·  2 天前  
掌上长春  ·  突发,这家保险公司解散 ·  2 天前  
掌上长春  ·  突发,这家保险公司解散 ·  2 天前  
保险一哥  ·  中国寿险公司如何应对低利率挑战,deepse ... ·  4 天前  
51好读  ›  专栏  ›  About云

kafka权威指南 第二章第6节 Kafka集群配置与调优

About云  · 公众号  ·  · 2017-06-06 15:29

正文

问题导读:
1 Kafka集群有什么优势?
2 集群中部署多少个节点合适?
3 集群针对系统如何调优?




Kafka集群

对于本地的开发工作或者概念性的验证工作,单个Kafka服务器就可以支撑了。但是以集群的方式部署Kafka将会有许多好处。最大的好处就是可以在多个服务器之间进行负载均衡。如果某个节点挂掉,则可以使用它的备份节点继续提供服务。本章节就重点关注下Kafka的集群。


图2-2 简单的Kafka集群



多少个Broker?

Kafka集群节点的个数需要考虑几个因素。首先需要关注的是为了满足消息持久化的需求,单个节点所能提供的磁盘空间。如果集群需要10T的空间保存数据,每个节点只有2T,那么就需要5个broker。另外还需要考虑其他应用的存储需求,不可能100%都用来给broker做持久化。如果kafka要做备份,那么磁盘的使用还需要翻倍。这就意味着,为了满足10T的需求以及备份的需求,那么至少需要10个broker。
另一个需要考虑的是集群处理的请求量,这通常是通过网络带宽来衡量的,典型的场景是有多个消费者同时消费数据、或者在某时间持久化的消息到达高峰。如果单个broker可以使用80%的网络带宽,如果有两个消费者,那么带宽就不够了。如果集群还是用了备份,还需要考虑数据进入备份节点的带宽,这部分的带宽压力会随着备份节点的个数增加而增加。
另外,也需要考虑磁盘的吞吐量和内存。

Broker的配置
在集群中,broker需要关注两个配置。第一个是zookeeper.connect参数,它用于控制集群存储的原信息路径。第二个是broker.id,它决定这个broker叫什么。其他会有一些控制备份的参数,稍后会提到。

操作系统调优

大多数linux分布式框架都会针对操作系统调优设置一些开箱即用的配置,针对Kafka的broker调优可能有所不同。主要需要关注的是虚存和网络,当然,为了存储消息也需要关注磁盘。一般配置操作系统参数的文件是/etc/sysctl.conf,有一些操作系统可能不同。

虚存
一般linux虚存都会根据自身系统的负载来设置。这里需要关注的是有多少交换空间可以使用。对于大多数的应用来说,吞吐都是个问题,建议避免使用交换空间。将内存页交换到磁盘会影响kafka的性能。另外,Kafka也会大量的使用系统的页缓存,如果此时被交换到磁盘上,相当于缓存未命中了。
一种比较好的方式就是关闭交换空间。交换空间其实也不是必须的,只不过在系统发生故障时,提供一些安全保障。因此可以设置vm.swappiness小一点,比如1,这个值是设置系统使用交换空间的百分比。最好还是减小页面缓存的大小,而不是直接使用交换空间。

为什么不设置swappiness为0?
以前都是推荐swappniess设置为0,这样意味着在内存不足时也不会使用交换空间。然后再linux内核3.5-rc1版本,并且这个改变应用到了很多的系统版本,比如Red Hat Enterprise 内核版本为2.6.32-303,它意味着在任何情况下都不会使用交换空间。因此还是推荐设置值为1.

还可以调整内存如何处理脏页到磁盘。生产者持久化消息的效率依赖于Kafka依赖于磁盘IO性能。这也是为什么日志段文件需要放在一个比较快的磁盘上存储,比如SSD或者RAID。这样在刷新到磁盘的时候,脏页的数量可以减少一些。这个参数通过vm.dirty_background_ratio来决定,默认是10。这个参数是操作同内存的百分比,在很多情况下都是设置为5。这个配置不能设置为0,这会导致内核在不断的刷新页,降低设备在读写峰值是的操作能力。
可以通过vm.dirty_ratio来设置脏页刷新到磁盘的数量,默认是20(也是内存的百分比).这个值可以设置在60-80之间。这个设置也有不少的风险,如果刷新中断,那么可能出现一段时间IO暂停。如果设置vm.dirty_ratio,推荐使用Kafka的备份来减少风险。
如果选择这几个参数进行优化,最好还是在kafka环境下模拟观察一下脏页的数量。脏页的配置是在/proc/vmstat文件中:

[AppleScript] 纯文本查看 复制代码

?

1
2
3
4
# cat /proc/vmstat | egrep "dirty|writeback"
nr_dirty 3875
nr_writeback 29






请到「今天看啥」查看全文