凌云时刻 · 技术

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

作者 | 计缘

来源 | 凌云时刻(微信号:linuxpk)

重要配置

  • 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系统的性能。所以我们可以注意以下几点:

  • 使用性能比较好的XFS日志文档系统,既Linux中的文件系统。

  • 如果发现在I/O操作方面出现了瓶颈,那么可以通过扩充磁盘来改善。Broker配置文件中的log.dirs配置项可以配置多个数据目录路径。

  • 设置合理的数据清理时间,也就是配置文件中的log.retention.hours配置项。如果已经消费的数据长时间保留在磁盘中,既没有意义又会对Kafka读写性能造成影响。

  • 及时监控部署Kafka服务器的磁盘情况。

网络

数据传输的延迟性是任何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产生资源竞争,从而影响性能。

 

小结

这是本小册的最后一章节,探讨了Kafka的一些重要配置和影响Kafka性能的关键因素。整个小册从最基本的认知到核心概念的诠释再到实践,帮助小伙伴渡过Kafka和Zookeeper的萌新阶段。希望能给小伙伴们带来帮助。

END

往期精彩文章回顾

Kafka从上手到实践 - 实践真知:搭建Kafka相关的UI工具

Kafka从上手到实践 - Kafka集群:启动Kafka集群

Kafka从上手到实践 - Kafka集群:Kafka Listeners

Kafka从上手到实践 - Kafka集群:配置Broker

Kafka从上手到实践:搭建Zookeeper集群

Kafka从上手到实践-Zookeeper CLI:CRUD zNode

Kafka从上手到实践 - 初步认知:Zookeeper

Kafka从上手到实践:Kafka Java Consumer

Kafka从上手到实践:Kafka Java Producer

Kafka CLI:Reseting Offset & Config CLI

Kafka CLI:Consumer CLI & Producer CLI

Kafka CLI:Topic CLI & Producer CLI

Kafka从上手到实践 - 实践真知:搭建单机Kafka

Kafka从上手到实践 - 庖丁解牛:Consumer

Kafka从上手到实践 - 庖丁解牛:Producer

Kafka从上手到实践 - 庖丁解牛:Partition

Kafka从上手到实践 - 庖丁解牛:Topic & Broker

Kafka从上手到实践 - 初步认知:MQ系统

长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

Kafka从上手到实践-Kafka集群:重要配置和性能探讨 | 凌云时刻相关推荐

  1. php连接kafka集群,Kafka集群环境配置

    Kafka集群环境配置 1 环境准备 1.1 集群规划 Node02 Node03 Node04 zk zk zk kafka kafka kafka 1.2 jar包下载 安装包:kafka_2.1 ...

  2. kafka基础之介绍和分布式集群搭建

    一 kafka介绍 现在各个电商平台,社交平台等诸多系统可以不断生产出各种细信息,那么我们应该如何收集它,如何分析它,以及输入实时的做到以上需求.Kafka应运而生. Kafka是一个分布式的的流式系 ...

  3. Kafka 详解(二)------集群搭建

    这里通过 VMware ,我们安装了三台虚拟机,用来搭建 kafka集群,虚拟机网络地址如下: hostname                      ipaddress             ...

  4. kafka tool 2.1连接kerberos的kafka(cdh6.3.2)集群。

    kafka tool 2.1连接kerberos的kafka(cdh6.3.2)集群. kafka tools 下载连接:https://www.kafkatool.com/download.html ...

  5. Kafka基于Zookeeper搭建高可用集群实战

    Kafka基于Zookeeper搭建高可用集群实战 1 前言 1.1 高可用的由来 为何需要Replication? 在Kafka在0.8以前的版本中,是没有Replication的,一旦某一个Bro ...

  6. kubernetes 入门实践-搭建集群

    ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(一个人的真正伟大之处就在于他能够认识到自己的渺小 -- 保罗) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤ 上一篇:kubernetes 入门实践-核心概念 下 ...

  7. Greenplum集群安装配置及最佳实践

    Greenplum集群安装配置及最佳实践 目录 Greenplum集群安装配置及最佳实践 1 目录 1 1 总体介绍 2 1.1 硬件平衡 2 1.2 高可用 2 1.3 部署方案 2 1.3.1 G ...

  8. ElasticSearch-2.0.0集群安装配置与API使用实践

    ElasticSearch是基于全文搜索引擎库Lucene构建的分布式搜索引擎,我们可以直接使用ElasticSearch实现分布式搜索系统的搭建与使用,都知道,Lucene只是一个搜索框架,它提供了 ...

  9. solrloud集群的配置,zoookeeper+IK分词器+solrcloud,以及集群连接,分片管理

    什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要 ...

  10. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...

最新文章

  1. [Google API](2)什么是google API
  2. nginx 没有cookie_Nginx 内容缓存及常见参数配置
  3. eclipse配置Maven中的Tomcat的使用
  4. 洛谷P2633 Count on a tree
  5. php在数据流(内存)中操纵远程数据
  6. POJ 3670 Eating Together
  7. Linux按压缩率大小排序,Linux下常用压缩 解压命令与压缩比率对比
  8. java怎么录入4位会员号_【Java】录入会员号会员生日会员积分等会员信息,并判断录入的会员号是否合法,具体如下图...
  9. C++基础:C++的封装/继承/多态
  10. AspectJ中5种类型的增强注解有什么区别?
  11. numpy中的对应元素相乘,可以使用广播
  12. Mac实用软件及功能吐血总结
  13. DSP重新上电程序不能运行
  14. 【python爬虫】每日获取强智教务系统课表,并发送短信到学生手机
  15. UAC协议基础第一篇: UAC类设备相关的描述符
  16. 网页表单文本框的自动填写(四种方法)
  17. 美容美发店会员管理系统开发_分享美容美发店做会员管理系统的好处
  18. 大谷新作,AI复原泰戈尔:世界以痛吻我,要我报之以歌
  19. 一次只做一件事,并做到最好!
  20. 郑州轻工业大学ACM(zzuli OJ 54)

热门文章

  1. spring-第四篇之让bean获取所在的spring容器
  2. javascript 对后台返回的数据进行分类
  3. 树莓派raspberrypi系统安装docker以及编译nginx和php镜像
  4. 基于stylus的border一像素线问题与ellipsis多行的兼容方案
  5. 设计模式(一):代理模式
  6. 读书笔记_Effective_C++_条款二:尽量以const, enum, inline替换#define
  7. Xamarin devexpress Grid
  8. Ubuntu 12.04 下安装 Eclipse
  9. 题目:[汪老师结婚]婚礼上的袭击
  10. learning opencv3: 四:Mat