kafka的server.properties配置参数说明

2024-09-05 13:08

本文主要是介绍kafka的server.properties配置参数说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

kafka的server.properties配置参数说明

    • broker.id
    • listeners
    • advertised.listeners
    • num.network.threads
    • num.io.threads
    • socket.send.buffer.bytes
    • socket.receive.buffer.bytes
    • socket.request.max.bytes
    • log.dirs
    • log.retention.bytes
    • log.retention.check.interval.ms
    • log.cleaner.enable
    • log.retention.hours
    • log.segment.bytes
    • log.cleanup.policy
    • message.max.bytes
    • controller.socket.timeout.ms
    • replica.lag.time.max.ms
    • replica.lag.max.messages
    • replica.fetch.wait.max.ms
    • zookeeper.connect
    • zookeeper.session.timeout.ms
    • zookeeper.connection.timeout.ms
    • zookeeper.sync.time.ms
    • Topic 级别参数的设置
    • JVM 参数
    • 操作系统参数

broker.id

每一个broker在集群中的唯一表示,要求是正数。
Kafka在启动时会在zookeeper中/brokers/ids路径下创建一个与当前broker的id为名称的虚节点,Kafka的健康状态检查就依赖于此节点。当broker下线时,该虚节点会自动删除,其他broker或者客户端通过判断/brokers/ids路径下是否有此broker的id来确定该broker的健康状态。

listeners

我们具体说说监听器的概念,从构成上来说,它是若干个逗号分隔的三元组,每个三元组的格式为<协议名称,主机名,端口号>。这里的协议名称可能是标准的名字,比如 PLAINTEXT 表示明文传输、SSL 表示使用 SSL 或 TLS 加密传输等;也可能是你自己定义的协议名字,比如CONTROLLER: //localhost:9092。

一旦你自己定义了协议名称,你必须还要指定listener.security.protocol.map参数告诉这个协议底层使用了哪种安全协议,比如指定

listener.security.protocol.map=CONTROLLER:PLAINTEXT

表示CONTROLLER这个自定义协议底层使用明文不加密传输数据。

advertised.listeners

Advertised 的含义表示宣称的、公布的。生产者或者消费者在外网环境时,需要添加的配置。是暴露给外部的listeners,如果没有设置,会用listeners

num.network.threads

broker处理消息的最大线程数,一般情况下数量为cpu核数

num.io.threads

broker处理磁盘IO的线程数,数值为cpu核数2倍

socket.send.buffer.bytes

socket的发送缓冲区,socket的调优参数SO_SNDBUFF

socket.receive.buffer.bytes

socket的接受缓冲区,socket的调优参数SO_RCVBUFF

socket.request.max.bytes

socket请求的最大数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖

log.dirs

用来配置Kafka数据文件存放的根目录,多个路径用逗号分隔,如下所示:
/home/kafka1,/home/kafka2,/home/kafka3
如果有条件的话最好保证这些目录挂载到不同的物理磁盘上。这样做有两个好处:

  1. 提升读写性能:比起单块磁盘,多块物理磁盘同时读写数据有更高的吞吐量。
  2. 能够实现故障转移:即 Failover。这是 Kafka 1.1 版本新引入的强大功能。要知道在以前,只要 Kafka Broker 使用的任何一块磁盘挂掉了,整个 Broker 进程都会关闭。但是自 1.1 开始,这种情况被修正了,坏掉的磁盘上的数据会自动地转移到其他正常的磁盘上,而且 Broker 还能正常工作。这个改进正是我们舍弃 RAID 方案的基础:没有这种 Failover 的话,只能依靠 RAID 来提供保障。

log.retention.bytes

topic每个分区的最大文件大小,一个topic的大小限制 = 分区数*log.retention.bytes。-1没有大小限log.retention.bytes和log.retention.minutes任意一个达到要求,都会执行删除,会被topic创建时的指定参数覆盖

log.retention.check.interval.ms

文件大小检查的周期时间,是否触发log.cleanup.policy中设置的策略

log.cleaner.enable

是否开启日志清理

log.retention.hours

控制一条消息数据被保存多长时间
比如log.retention.hours=168表示默认保存 7 天的数据,自动删除 7 天前的数据。很多公司把 Kafka 当做存储来使用,那么这个值就要相应地调大。
这个参数会在日志segment没有达到log.segment.bytes设置的大小,也会强制新建一个segment会被 topic创建时的指定参数覆盖

log.segment.bytes

topic的分区是以一堆segment文件存储的,这个控制每个segment的大小,会被topic创建时的指定参数覆盖
这个值默认是 -1,表明你想在这台 Broker 上保存多少数据都可以,至少在容量方面 Broker 绝对为你开绿灯,不会做任何阻拦。这个参数真正发挥作用的场景其实是在云上构建多租户的 Kafka 集群:设想你要做一个云上的 Kafka 服务,每个租户只能使用 100GB 的磁盘空间,为了避免有个“恶意”租户使用过多的磁盘空间,设置这个参数就显得至关重要了。

log.cleanup.policy

日志清理策略选择有:delete和compact主要针对过期数据的处理,或是日志文件达到限制的额度,会被 topic创建时的指定参数覆盖
log.retention.bytes和log.retention.minutes或log.retention.hours任意一个达到要求,都会执行删除

message.max.bytes

单位是字节,默认的 1000012 ,还不到 1MB。实际场景中突破 1MB 的消息都是屡见不鲜的,因此在线上环境中设置一个比较大的值还是比较保险的做法。毕竟它只是一个标尺而已,仅仅衡量 Broker 能够处理的最大消息大小,即使设置大一点也不会耗费什么磁盘空间的。

controller.socket.timeout.ms

partition leader与replicas之间通讯时,socket的超时时间

replica.lag.time.max.ms

replicas响应partition leader的最长等待时间,若是超过这个时间,就将replicas列入ISR(in-sync replicas),并认为它是死的,不会再加入管理中

replica.lag.max.messages

在broker数量较少,或者网络不足的环境中,建议提高此值

replica.fetch.wait.max.ms

replicas同leader之间通信的最大等待时间,失败了会重试

zookeeper.connect

zookeeper连接地址
zookeeper.connect : zk1:2181,zk2:2181,zk3:2181
如果你有两套 Kafka 集群,假设分别叫它们 kafka1 和 kafka2,那么两套集群的zookeeper.connect参数可以这样指定:

zk1:2181,zk2:2181,zk3:2181/kafka1和zk1:2181,zk2:2181,zk3:2181/kafka2

zookeeper.session.timeout.ms

ZooKeeper的最大超时时间,就是心跳的间隔,若是没有反映,那么认为已经死了,不易过大

zookeeper.connection.timeout.ms

ZooKeeper的连接超时时间

zookeeper.sync.time.ms

ZooKeeper集群中leader和follower之间的同步时间

Topic 级别参数的设置

  • 创建 Topic 时进行设置
 需要保存最近半年的交易数据,最大传输数据为 5MB。
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transaction --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
  • 修改 Topic 时设置
使用kafka-configs来修改 Topic 级别参数, 设置最大发送数据为 10MB:
bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name transaction --alter --add-config max.message.bytes=10485760

JVM 参数

  • 堆内存设置
    将JVM 堆大小设置成 6GB , 目前业界比较公认的一个合理值.默认的 1GB 有点小,毕竟 Kafka Broker 在与客户端进行交互时会在 JVM 堆上创建大量的 ByteBuffer 实例,Heap Size 不能太小。

  • GC的设置
    推荐使用 G1 收集器

$> export KAFKA_HEAP_OPTS=--Xms6g  --Xmx6g
$> export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
$> bin/kafka-server-start.sh config/server.properties

操作系统参数

  1. 文件描述符限制
    文件句柄数 ulimit -n
    通常情况下将它设置成一个超大的值是合理的做法,比如ulimit -n 1000000。
    如果设置的不够大的话,会抛出异常: Too many open files
  2. 文件系统类型
    XFS 的性能要强于 ext4,所以生产环境最好还是使用 XFS。
    据说 ZFS 性能更强,可以考虑试试.
    测试报告: https://www.confluent.io/kafka-summit-sf18/kafka-on-zfs
  3. Swappiness
    网上很多文章都提到设置其为 0,将 swap 完全禁掉以防止 Kafka 进程使用 swap 空间。推荐设置成一个较小的值。为什么呢?因为一旦设置成 0,当物理内存耗尽时,操作系统会触发 OOM killer 这个组件,它会随机挑选一个进程然后 kill 掉,即根本不给用户任何的预警。但如果设置成一个比较小的值,当开始使用 swap 空间时,你至少能够观测到 Broker 性能开始出现急剧下降,从而给你进一步调优和诊断问题的时间。基于这个考虑, 建议将 swappniess 配置成一个接近 0 但不为 0 的值,比如 1。
  4. 提交时间/Flush 落盘时间
    向 Kafka 发送数据并不是真要等数据被写入磁盘才会认为成功,而是只要数据被写入到操作系统的页缓存(Page Cache)上就可以了,随后操作系统根据 LRU 算法会定期将页缓存上的“脏”数据落盘到物理磁盘上。这个定期就是由提交时间来确定的,默认是 5 秒。一般情况下我们会认为这个时间太频繁了,可以适当地增加提交间隔来降低物理磁盘的写操作。当然你可能会有这样的疑问:如果在页缓存中的数据在写入到磁盘前机器宕机了,那岂不是数据就丢失了。的确,这种情况数据确实就丢失了,但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能还是一个合理的做法。

参考链接
https://zhangboyi.blog.csdn.net/article/details/103661629
https://blog.51cto.com/u_12445535/2437635

这篇关于kafka的server.properties配置参数说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1139050

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

JDK8(Java Development kit)的安装与配置全过程

《JDK8(JavaDevelopmentkit)的安装与配置全过程》文章简要介绍了Java的核心特点(如跨平台、JVM机制)及JDK/JRE的区别,重点讲解了如何通过配置环境变量(PATH和JA... 目录Java特点JDKJREJDK的下载,安装配置环境变量总结Java特点说起 Java,大家肯定都