Kafka从上手到实践-Kafka集群:重要配置和性能探讨

栏目: 服务器 · Apache · 发布时间: 6年前

内容简介:最后这一章节总结Kafka中需要特别关注的重要配置以及影响Kafka性能的因素。以上是比较重要,需要我们根据实际情况额外关注的配置项。影响Kafka性能大概有五个因素。

最后这一章节总结Kafka中需要特别关注的重要配置以及影响Kafka性能的因素。

重要配置

  • auto.create.topics.enable :该配置项默认值是 true ,但在生产环境最好设置为 false 。这样可以控制创建Topic的人以及创建时间。
  • background.threads :该配置项默认值是10,既整个Kafka在执行各种任务时会启动的线程数。如果你的CPU很强劲,那么可以将线程数设大一点。
  • delete.topic.enable :该配置项默认值是 false ,可以根据实际需求改变,在生产环境还是建议保持默认值,这样至少不会出现Topic被误删的情况。
  • log.flush.interval.messages :该配置项最好保持默认值,把这个任务交给操作系统的文件系统去处理。
  • log.retention.hours :日志文件保留的时间默认是168小时,既7天。这个配置可以根据具体业务需求而定。
  • message.max.bytes :每条Message或一批次Message的大小默认是1MB。这个配置也要根据具体需求而定,比如带宽的情况。
  • min.insync.replicas :该配置项的默认值是1,既在acks=all时,最少得有一个Replica进行确认回执。建议在生产环境配置为2,保证数据的完整性。
  • num.io.threads :处理I/O操作的线程数,默认是8个线程。如果觉得在这个环节达到了瓶颈,那么可以适当调整该参数。
  • num.network.threads :处理网络请求和响应的线程数,默认是3个线程。如果觉得在这个环节达到了瓶颈,那么可以适当调整该参数。
  • num.recovery.threads.per.data.dir :每个数据目录启用几个线程来处理,这里的线程数和数据目录数是乘积关系,并且只在Broker启动或关闭时使用。默认值是1,根据实际情况配置数据目录数,从而判断该配置项应该如何设置。
  • num.replica.fetchers :该配置项影响Replicas同步数据的速度,默认值是1,如果发现Replicas同步延迟较大,可以提升该配置项。
  • offsets.retention.minutes :Offset保留的时间,默认值是1440,既24小时。在生产环境建议将该配置项设大一点,比如设置为1个月,保证消费数据的完整性。
  • unclean.leader.election.enable :该配置项的作用是,指定是否可以将非ISR的Replicas选举为Leader,默认值为 false 。在生产环境建议保持默认值,防止数据丢失。
  • zookeeper.session.timeout.ms :Zookeeper会话超时时间,默认值为6000。按实际情况而定,通常情况下保持60秒即可。
  • default.replication.factor :默认Replication Factor为1,建议设置为2或者3,以保证数据完整性和整个集群的健壮性。
  • num.partitions :Topic默认的Partition数,默认是1,建议设置为3或者6,以保证数据完整性和整个集群的健壮性。

以上是比较重要,需要我们根据实际情况额外关注的配置项。

影响性能的因素

影响Kafka性能大概有五个因素。

磁盘I/O

我们知道Kafka是将大多数数据保存在磁盘上的。所以磁盘的读写性能很大程度上会影响Kafka系统的性能。所以我们可以注意以下几点:

log.dirs
log.retention.hours

网络

数据传输的延迟性是任何MQ系统都要关注的问题,Kafka也不例外,在这方面我们要注意以下几点:

  • 确保部署Kafka的服务器和部署Zookeeper的服务器在一个内网内,服务器之间的物理距离不要太远,比如一个在北京,一个在上海。
  • 确保部署不同Kafka Broker的服务器在一个内网内,服务器之间的物理距离不要太远。
  • 保证服务器有比较好的网络带宽配置。

RAM

Kafka的高性能特性离不开对计算机内存的使用技术,对内存的使用大体分 Java 堆内存的使用和操作系统(Linux)Page Cache的使用:

  • 在启动Kafka Broker时,可以通过环境变量 KAFKA_HEAP_OPTS 设置对Java堆内存的使用大小。比如 export KAFKA_HEAP_OPTS=“-Xmx4g”
  • Broker中的Partition数量会影响对Java堆内存的使用大小。Partition越多,堆内存使用的越多。
  • 对于Page Cache/文件Cache,我们不用做任何设置:

    Page Cache:当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从存储设备读入到这些内存中,然后再将数据分发给应用程序;当需要往文件中写数据时,操作系统先分配内存接收用户数据,然后再将数据从内存写到磁盘上。文件 Cache 管理指的就是对这些由操作系统分配,并用来存储文件数据的内存的管理。

CPU

因为Kafka在Message传输的整个过程中,不会对Message进行任何计算,所以CPU通常不会成为Kafka性能的主要瓶颈。但是在一些情况下,也会对Kafka的性能产生影响:

  • Message加密/解密的过程中会增加CPU的负载。
  • Message压缩/解压的过程中会增加CPU的负载。
  • 在GC堆内存时会增加CPU的负载。

操作系统

通常优先推荐使用 Linux 系统,尤其在高性能计算领域,Linux已经成为一个占主导地位的操作系统。其次也可以使用Solaris系统。Windows系统是不推荐使用的。另外,尽量保证运行Kafka Broker的操作系统中,不要运行其他的应用程序,避免和Kafka产生资源竞争,从而影响性能。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Professional JavaScript for Web Developers

Professional JavaScript for Web Developers

Nicholas C. Zakas / Wrox / 2009-1-14 / USD 49.99

This eagerly anticipated update to the breakout book on JavaScript offers you an in-depth look at the numerous advances to the techniques and technology of the JavaScript language. You'll see why Java......一起来看看 《Professional JavaScript for Web Developers》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具