首先感谢很多先辈们的总结,让我省去了很多思考的功夫,更快的整理出这些从0.10.0 kafka官网中查询到的参数,但是感觉官网列出的这些参数不是很全,后续发现新参数会逐步添加到这个里面。如果有同事发现错误的地方或者有个人见解的地方也请留言,我会感谢并进行整合修改。
Listeners
默认值:null
描述:例如PLAINTEXT://172.16.49.173:9093
advertised.host.name
默认值:null
描述:外网访问使用,和advertised.listeners,advertised.port配合使用,0.10开始,只配置advertised.listeners就可以
advertised.listeners
默认值:null
描述:是暴露给外部的listeners,如果没有设置,会用listeners
advertised.port
默认值:9092
描述:端口配置参数
auto.create.topics.enable
默认值:true
描述:若为true则如果producer写入某个不存在的topic时会自动创建该topic,若为false则需要事先创建否则会报错:failed after 3 retries
auto.leader.rebalance.enable
默认值:true
描述:允许自动主平衡。后台线程定时校验和触发主平衡
background.threads
默认值:10
描述:后台处理任务的线程数,用来处理各种不同的后台任务的线程数量,比如删除文件,一般不需要改变它。
compression.type
默认值:producer
描述:指定一个主题最后的压缩类型。这个配置项接收标准的压缩编码(gzip,snappy,lz4)。还可以配置为uncompressed,表示不压缩。也可以配置为producer,表示与生产者配置的压缩类型一致。
delete.topic.enable
默认值:false
描述:可以删除主题。如果设置为关闭,那么通过管理工具删除主题是无效的,如果不加这个参数其实并不执行删除动作,仅仅是在zookeeper上标记该topic要被删除而已,同时也提醒用户一定要提前打开delete.topic.enable开关,否则删除动作是不会执行的。
leader.imbalance.check.interval.seconds
默认值:300
描述 :检测leader不平衡的时间间隔,对partition进行balance操作,定时执行的调度函数为checkAndTriggerPartitionRebalance。
leader.imbalance.per.broker.percentage
默认值:10
描述:每个broker允许的不平衡的leader的百分比。如果每个broker超过了这个百分比,复制控制器会重新平衡leadership
log.flush.interval.messages
默认值:9223372036854775807
描述:log文件”sync”到磁盘之前累积的消息条数,因为磁盘IO操作是一个慢操作,但又是一个”数据可靠性"的必要手段,所以此参数的设置,需要在"数据可靠性"与"性能"之间做必要的权衡.如果此值过大,将会导致每次"fsync"的时间较长(IO阻塞),如果此值过小,将会导致"fsync"的次数较多,这也意味着整体的client请求有一定的延迟.物理server故障,将会导致没有fsync的消息丢失.
log.flush.interval.ms
默认值:null
描述:此项配置用来置顶强制进行fsync日志到磁盘的时间间隔(固化到硬盘);例如,如果设置为1000,那么每1000ms就需要进行一次fsync。一般不建议使用这个选项。
log.flush.offset.checkpoint.interval.ms
默认值:60000
描述:记录上次把log刷到磁盘的时间点的频率,用来日后的recovery。通常不需要改变
log.flush.scheduler.interval.ms
默认值:9223372036854775807
描述:log flusher检查是否需要把log刷到磁盘的时间间隔,单位为ms。
log.retention.bytes
默认值 :-1
描述:如果使用“delete”的retention 策略,这项配置就是指在删除日志之前,日志所能达到的最大尺寸。默认情况下,没有尺寸限制而只有时间限制
log.retention.hours
默认值:168
描述:数据文件保留多长时间, 存储的最大时间超过这个时间会根据log.cleanup.policy设置数据清除策略,log.retention.bytes和log.retention.minutes或log.retention.hours,log.retention.ms
任意一个达到要求,都会执行删除 按照文件大小删除是log.retention.bytes其他两个是按小时删除
log.retention.minutes
默认值:null
描述:数据文件保留多长时间, 存储的最大时间超过这个时间会根据log.cleanup.policy设置数据清除策略,log.retention.bytes和log.retention.minutes或log.retention.hours,log.retention.ms
任意一个达到要求,都会执行删除 按照文件大小删除是log.retention.bytes其他两个是按时间删除。如果不配,使用log.retention.hours
log.retention.ms
默认值:null
描述:日志文件保留的毫秒数,如果不配,使用log.retention.minutes
log.roll.hours
默认值:168
描述:这个参数会在日志segment(日志的分块文件)没有达到log.segment.bytes设置的大小,也会强制新建一个segment。会被 topic创建时的指定参数覆盖。
log.roll.ms
默认值:null
描述:这个参数会在日志segment(日志的分块文件)没有达到log.segment.bytes设置的大小,也会强制新建一个segment。会被 topic创建时的指定参数覆盖。如果没有设置默认使用log.roll.hours
log.roll.jitter.hours
默认值:0
描述:指定日志切分段的毫秒数,从logRollTimeMillis减去的最大抖动(以小时为单位),如果不设置,默认使用log.roll.jitter.hours
log.roll.jitter.ms
默认值:null
描述:指定日志切分段的毫秒数,从logRollTimeMillis减去的最大抖动(以ms为单位),如果不设置,默认使用log.roll.jitter.hours
log.segment.bytes
默认值:1073741824
描述:topic 分区的日志存放在某个目录下诸多文件中,这些文件将partition的日志切分成一段一段的,这就是段文件(segment file);一个topic的一个分区对应的所有segment文件称为log。这个设置控制着一个segment文件的最大的大小,如果超过了此大小,就会生成一个新的segment文件。此配置可以被覆盖
log.segment.delete.delay.ms
默认值:60000
描述:在log文件被移出索引后(删除),log文件的保留时间。在这段时间内运行的任意正在进行的读操作完成操作,不用去打断它。通常不需要改变。
message.max.bytes
默认值:1000012
描述:kafka允许的最大的一个批次的消息大小。 如果这个数字增加,并且有0.10.2版本以下的消费者,那么消费者的提取大小也必须增加,以便他们可以取得这么大的记录批次。在最新的消息格式版本中,记录总是被组合到一个批次以提高效率。 在以前的消息格式版本中,未压缩的记录不会分组到批次中,并且此限制仅适用于该情况下的单个记录。可以使用主题级别max.message.bytes来设置每个主题。
min.insync.replicas
默认值:1
描述:该属性规定了最小的ISR数,当生产者将ack设置为“全部”(或“-1”)时,min.insync.replicas指定必须确认写入被认为成功的最小副本数(必须确认每一个repica的写数据都是成功的)。 如果这个最小值不能满足,那么生产者将会引发一个异常(NotEnoughReplicas或NotEnoughReplicasAfterAppend)。当一起使用时,min.insync.replicas和acks允许您强制更大的耐久性保证。 一个典型的情况是创建一个复制因子为3的主题,将min.insync.replicas设置为2,并且生产者使用“all”选项。 这将确保如果大多数副本没有写入生产者则抛出异常。
num.io.threads
默认值:8
描述:执行磁盘IO的线程数,不要小于磁盘的数量
num.network.threads
默认值:3
描述:服务器用于接收来自网络的请求并向网络发送响应的线程数
num.recovery.threads.per.data.dir
默认值:1
描述:每个数据目录的线程数,用于启动时的日志恢复和关闭时的刷新,采用RAID的时候可以增大该值。
num.replica.fetchers
默认值:1
描述:用来从leader复制消息的线程数量,增大这个值可以增加follow的I/O并行度
offset.metadata.max.bytes
默认值:4096
描述:允许client(消费者)保存它们元数据(offset)的最大的数据量。
offsets.commit.required.acks
默认值:-1
描述:在offset commit可以接受之前,需要设置acks的数目,一般不需要更改
offsets.commit.timeout.ms
默认值:5000
描述:offsets提交将被延迟,直到偏移量topic的所有副本都收到提交或达到此超时。 这与生产者请求超时类似。
offsets.load.buffer.size
默认值:5242880
描述:每次从offset段文件往缓存加载offsets数据时的读取的数据大小。
offsets.retention.check.interval.ms
默认值:600000
描述:检查失效offset的频率。
offsets.retention.minutes
默认值:1440
描述:如果一个group在这个时间没没有提交offsets,则会清理这个group的offset数据。
offsets.topic.compression.codec
默认值:0
描述:用于offsets主题的压缩编解码器 - 压缩可用于实现“原子”提交
offsets.topic.num.partitions
默认值:50
描述:Offsets topic的分区数量(部署后不应更改)
offsets.topic.replication.factor
默认值:3
描述:Offsets topic的复制因子(设置得更高以确保可用性)。 内部主题创建将失败,直到群集大小满足此复制因素要求。
offsets.topic.segment.bytes
默认值:104857600
描述:为了便于更快的日志压缩和缓存加载,偏移量的主题段字节应保持相对较小
queued.max.requests
默认值:5000
描述:I/O线程等待队列中的最大的请求数,超过这个数量,network线程就不会再接收一个新的请求。这个参数是指定用于缓存网络请求的队列的最大容量,这个队列达到上限之后将不再接收新请求。一般不会成为瓶颈点,除非I/O性能太差,这时需要配合num.io.threads等配置一同进行调整。
quota.consumer.default
默认值:9223372036854775807
描述:只有在动态默认配额没有配置或者为Zookeeper时才使用。 如果一个消费者每秒消费的数据量大于此值,则暂时不会再允许消费。0.9版本新加。
quota.producer.default
默认值:9223372036854775807
描述:只有在动态默认配额没有配置或者为Zookeeper时才使用。如果一个生产者每秒产生的数据大于此值,则暂时会推迟接受生产者数据。
replica.fetch.max.bytes
默认值:1048576
描述:复制数据过程中,replica收到的每个fetch响应,期望的最大的字节数,如果没有收到足够的字节数,就会等待期望更多的数据,直到达到replica.fetch.wait.max.ms。
replica.fetch.min.bytes
默认值:1
描述:复制数据过程中,replica收到的每个fetch响应,期望的最小的字节数,如果没有收到足够的字节数,就会等待期望更多的数据,直到达到replica.fetch.wait.max.ms。
replica.fetch.wait.max.ms
默认值:500
描述:Replicas follow同leader之间通信的最大等待时间,失败了会重试。 此值始终应始终小于replica.lag.time.max.ms,以防止针对低吞吐量主题频繁收缩ISR
replica.high.watermark.checkpoint.interval.ms
默认值:5000
描述:每一个replica follower存储自己的high watermark到磁盘的频率,用来日后的recovery。
replica.lag.time.max.ms
默认值:10000
描述:如果一个follower在这个时间内没有发送fetch请求,leader将从ISR重移除这个follower,并认为这个follower已经挂了。
replica.socket.receive.buffer.bytes
默认值:65536
描述:复制数据过程中,follower发送网络请求给leader的socket receiver buffer的大小。
replica.socket.timeout.ms
默认值:30000
描述:复制数据过程中,replica发送给leader的网络请求的socket超时时间。它的值应该至少是replica.fetch.wait.max.ms
request.timeout.ms
默认值:30000
描述:在向producer发送ack之前,broker允许等待的最大时间,如果超时,broker将会向producer发送一个error ACK.意味着上一次消息因为某种原因未能成功(比如follower未能同步成功) ,客户端将在必要时重新发送请求,或者如果重试耗尽,则请求失败。
socket.receive.buffer.bytes
默认值:102400
描述:server端用来处理socket连接的SO_RCVBUFF缓冲大小。如果值为-1,则将使用操作系统默认值。
socket.request.max.bytes
默认值:104857600
描述:server能接受的请求的最大的大小,这是为了防止server跑光内存,不能大于Java堆的大小。
socket.send.buffer.bytes
默认值:102400
描述:server端用来处理socket连接的SO_SNDBUFF缓冲大小。如果值为-1,则将使用操作系统默认值。
unclean.leader.election.enable
默认值:true
描述:指明了是否能够使不在ISR中replicas follower设置用来作为leader,这么做可能会导致数据丢失
zookeeper.connection.timeout.ms
默认值:null
描述:客户端等待连接到zk的最大时间。如果不设置,系统默认使用zookeeper.session.timeout.ms
zookeeper.session.timeout.ms
默认值:60000
描述:ZooKeeper的session的超时时间,如果在这段时间内没有收到ZK的心跳,则会被认为该Kafka server挂掉了。如果把这个值设置得过低可能被误认为挂掉,如果设置得过高,如果真的挂了,则需要很长时间才能被server得知。
zookeeper.set.acl
默认值:false
描述:连接zookeeper是否使用 ACLs安全验证
broker.id.generation.enable
默认值:true
描述:服务器是否允许自动生成broker.id;如果允许则产生的值会交由reserved.broker.max.id审核
broker.rack
默认值:null
描述:broker的机架位置。 这将在机架感知复制分配中用于容错。 例如:RACK1,主机名
connections.max.idle.ms
默认值:600000
描述:空闲连接超时,服务器套接字处理器线程关闭闲置超过此的连接
controlled.shutdown.enable
默认值:ture
描述:是否允许控制器关闭broker ,若是设置为true,会关闭在这个broker上所有分区的leader,并转移到其他broker,这会降低在关闭期间不可用的时间。
controlled.shutdown.max.retries
默认值:3
描述 :控制器在关闭时可能有多种原因导致失败,可以重新关闭的次数。
controlled.shutdown.retry.backoff.ms
默认值:5000
描述:在每次重新关闭前,系统需要一定的时间去恢复发生错误之前的状态,这个就是在重试期间的回退(backoff)时间。
controller.socket.timeout.ms
默认值:30000
描述:控制器到broker通道的socket超时时间
default.replication.factor
默认值:1
描述:自动创建topic时的默认副本的个数
fetch.purgatory.purge.interval.requests
默认值:100
描述:清除consumer历史获取request记录
producer.purgatory.purge.interval.requests
默认值:1000
描述:清除producer历史生成request记录
group.max.session.timeout.ms
默认值:300000
描述:消费者向组内注册时允许的最大超时时间,超过这个时间表示注册失败。更长的超时使消费者有更多的时间来处理心跳之间的消息,代价是检测失败的时间更长。
group.min.session.timeout.ms
默认值:6000
描述:消费者向组内注册时允许的最小超时时间,更短的超时以更频繁的消费者心跳为代价但有更快速的故障检测,这可能影响broker资源。
inter.broker.protocol.version
默认值:0.10.0-IV1
描述:指定将使用哪个版本的 inter-broker 协议。 在所有经纪人升级到新版本之后,这通常会受到冲击。升级时要设置
log.cleaner.backoff.ms
默认值:15000
描述 :检查log是否需要clean的时间间隔
log.cleaner.dedupe.buffer.size
默认值:134217728
描述:日志压缩去重时候的缓存空间,在空间允许的情况下,越大越好。
log.cleaner.delete.retention.ms
默认值:86400000(24 hours)
描述:对于压缩的日志保留的最长时间,也是客户端消费消息的最长时间,同log.retention.minutes的区别在于一个控制未压缩数据,一个控制压缩后的数据。
log.cleaner.enable
默认值:true
描述 :启用日志清理器进程在服务器上运行。使用了cleanup.policy = compact的主题,包括内部offsets主题,都应该启动该选项。如果被禁用的话,这些话题将不会被压缩,并且会不断增长。
log.cleaner.io.buffer.load.factor
默认值:0.9
描述:日志清理中hash表的扩大因子,日志清除器重复数据删除缓冲区负载因子。 重复数据删除缓冲区已满的百分比。 较高的值将允许同时清除更多的日志,但会导致更多的哈希冲突。
log.cleaner.io.buffer.size
默认值:524288
描述:日志清理时候用到的I/O块(chunk)大小,用于清理所有清除程序线程的日志清除器I / O缓冲区的总内存。
log.cleaner.io.max.bytes.per.second
默认值:1.7976931348623157E308
描述:在执行log compaction的过程中,限制了cleaner每秒钟I/O的数据量,以免cleaner影响正在执行的请求。
log.cleaner.min.cleanable.ratio
默认值:0.5
描述:脏日志与日志的总日志的最小比率,以符合清理条件,控制了log compactor进行clean操作的频率。默认情况下,当log的50%以上已被clean时,就不用继续clean了。此配置可以被覆盖。
log.cleaner.threads
默认值:1
描述:使用log compaction功能来清理log的线程的数量
log.cleanup.policy
默认值:delete
描述:此配置可以设置成delete或compact。 逗号分隔的有效策略列表。如果设置为delete,当log segment文件的大小达到上限,或者roll时间达到上限,文件将会被删除。如果设置成compact,则此文件会被清理,标记成已过时状态,此配置可以被覆盖。
log.index.interval.bytes
默认值:4096
描述 :当执行一个fetch操作后,需要一定的空间来扫描最近的offset大小,设置越大,代表扫描速度越快,但是也更耗内存,一般情况下不需要改变这个参数。
log.index.size.max.bytes
默认值:10485760
描述:每个log segment的最大尺寸。注意,如果log尺寸达到这个数值,即使尺寸没有超过log.segment.bytes限制,也需要产生新的log segment。
log.message.format.version
默认值:0.10.0-IV1
描述:指定broker将用于将消息添加到日志文件的消息格式版本。 该值应该是有效的ApiVersion。 一些例子是:0.8.2,0.9.0.0,0.10.0。 通过设置特定的消息格式版本,用户保证磁盘上的所有现有消息都小于或等于指定的版本。 不正确地设置这个值将导致使用旧版本的用户出错,因为他们将接收到他们不理解的格式的消息。
log.message.timestamp.difference.max.ms
默认值:9223372036854775807
描述:broker收到消息时的时间戳和消息中指定的时间戳之间允许的最大差异。 如果log.message.timestamp.type = CreateTime,如果时间戳的差值超过此阈值,则会拒绝接受这条消息。 如果log.message.timestamp.type = LogAppendTime,则忽略此配置。允许的最大时间戳差异不应大于log.retention.ms,以避免不必要地频繁进行日志滚动。
log.message.timestamp.type
默认值:CreateTime
描述 :定义消息中的时间戳是消息创建时间还是日志追加时间。 该值应该是“CreateTime”或“LogAppendTime”
log.preallocate
默认值:false
描述:是否预创建新的段文件,windows推荐使用
log.retention.check.interval.ms
默认值:300000
描述:检查日志段文件的间隔时间,以确定是否文件属性是否到达删除要求。
max.connections.per.ip
默认值:2147483647
描述:broker上每个IP允许最大的连接数
max.connections.per.ip.overrides
默认值:
描述:每个ip或者hostname默认的连接的最大覆盖
num.partitions
默认值:1
描述:新建Topic时默认的分区数
principal.builder.class
默认值:
class org.apache.kafka.common.security.auth.DefaultPrincipalBuilder
描述:实现Principal Builder接口的类的完全限定名,该接口当前用于构建与SSL安全协议的连接的Principal。
replica.fetch.backoff.ms
默认值:1000
描述:复制数据时失败等待时间。
reserved.broker.max.id
默认值:1000
描述:可用于broker.id的最大数量。
sasl.enabled.mechanisms
默认值:[GSSAPI]
描述:Kafka服务器中启用的SASL机制列表。 该列表可以包含安全提供者可用的任何机制。 默认情况下仅启用GSSAPI。
sasl.kerberos.kinit.cmd
默认值:/usr/bin/kinit
描述:Kerberos kinit命令路径
sasl.kerberos.min.time.before.relogin
默认值:60000
描述:登录线程在刷新尝试之间的休眠时间。
sasl.kerberos.principal.to.local.rules
默认值:[DEFAULT]
描述:用于从主体名称到短名称(通常是操作系统用户名)的映射规则列表。 按顺序评估规则,并且使用与主体名称匹配的第一个规则将其映射到短名称。 将忽略列表中的任何后续规则。 默认情况下,{username} / {hostname} @ {REALM}形式的主体名称映射到{username}。 有关格式的详细信息,请参阅安全授权和acls。
sasl.kerberos.service.name
默认值:null
描述 :Kafka运行的Kerberos主体名称。 这可以在Kafka的JAAS配置或Kafka的配置中定义。
sasl.kerberos.ticket.renew.jitter
默认值:0.05
描述:添加到更新时间的随机抖动的百分比。
sasl.kerberos.ticket.renew.window.factor
默认值:0.8
描述:登录线程将休眠,直到从上次刷新ticket到期,此时将尝试续订ticket
sasl.mechanism.inter.broker.protocol
默认值:GSSAPI
描述:SASL机制用于代理间通信。 默认为GSSAPI。
security.inter.broker.protocol
默认值:PLAINTEST
描述:用于在代理之间通信的安全协议。 有效值为:PLAINTEXT,SSL,SASL PLAINTEXT,SASL SSL。
ssl.cipher.suites
默认值:null
描述:密码套件列表。用于TLS或SSL网络协议协商网络连接的安全设置的认证,加密,MAC和密钥交换算法的命名组合。 默认情况下,支持所有可用的密码套件。
ssl.client.auth
默认值:none
描述:配置kafka代理以请求客户端认证。 以下设置很常见:ssl.client.auth =必需如果设置为必需,则需要客户端身份验证。 ssl.client.auth = requested这意味着客户端认证是可选的。 与请求不同,如果设置此选项,客户端可以选择不提供有关本身的身份验证信息ssl.client.auth = none这意味着不需要客户端身份验证。
ssl.enabled.protocols
默认值:[TLSv1.2, TLSv1.1, TLSv1]
描述:为SSL连接启用的协议列表。
ssl.key.password
默认值:null
描述:私钥到密钥库文件的密码。 这对于客户端是可选的。
ssl.keymanager.algorithm
默认值:SunX509
描述:密钥管理器工厂用于SSL连接的算法。 默认值是为Java虚拟机配置的密钥管理器工厂算法。
ssl.keystore.location
默认值:null
描述 :密钥存储文件的位置。 这对于客户端是可选的,可以用于客户端的双向身份验证。
ssl.keystore.password
默认值:null
描述:密钥存储文件的存储密码。 客户端是可选的,只有配置了ssl.keystore.location才需要。
ssl.keystore.type
默认值:jks
描述:密钥存储文件的文件格式。 对于客户端是可选的
ssl.protocol
默认值:TLS
描述:用于生成SSLContext的SSL协议。 默认设置为TLS,这在大多数情况下是正常的。 最近的JVM中允许的值是TLS,TLSv1.1和TLSv1.2。 旧的JVM可能支持SSL,SSLv2和SSLv3,但是由于已知的安全漏洞,它们的使用不受欢迎。
ssl.provider
默认值:null
描述:用于SSL连接的安全提供程序的名称。 默认值是JVM的默认安全提供程序。
ssl.trustmanager.algorithm
默认值:PKIX
描述:信任管理器工厂用于SSL连接的算法。 默认值是为Java虚拟机配置的信任管理器工厂算法。
ssl.truststore.location
默认值:null
描述:信任存储文件的位置。
ssl.truststore.password
默认值:null
描述 :信任存储文件的密码。
ssl.truststore.type
默认值:jks
描述:信任存储文件的文件格式。
authorizer.class.name
默认值:
描述:应该用于授权的授权程序类
metric.reporters
默认值:[]
描述:用作度量报告器的类的列表。 实现MetricReporter接口允许插入将通知新度量标准创建的类。 总是包括JmxReporter以注册JMX统计信息。
metrics.num.samples
默认值:2
描述:维持计算度量的样本数。
metrics.sample.window.ms
默认值:30000
描述 :计算度量样本的时间窗口。
quota.window.num
默认值:11
描述:要在客户端配额的内存中保留的样本数。
quota.window.size.seconds
默认值:1
描述:客户端配额的每个样本的时间跨度
ssl.endpoint.identification.algorithm
默认值:null
描述:端点标识算法,使用服务器证书验证服务器主机名。
zookeeper.sync.time.ms
默认值:2000
描述:一个ZK follower能落后leader多久