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

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

内容简介:最后这一章节总结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产生资源竞争,从而影响性能。


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

查看所有标签

猜你喜欢:

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

Effective STL中文版

Effective STL中文版

[美]Scott Meyers / 潘爱民、陈铭、邹开红 / 清华大学出版社 / 2006-1 / 30.00元

STL是C++标准库的一部分。本书是针对STL的经验总结,书中列出了50个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。一起来看看 《Effective STL中文版》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具