Kafka配置文件

来源:互联网 发布:博图软件下载 编辑:程序博客网 时间:2024/06/14 10:37

Spark,Hadoop交流群,群QQ号:521066396,欢迎加入共同学习,一起进步~

1. Broker

Broker端核心的配置:broker.id、log.dirs、zookeeper.connect
相关代码的查看类:kafka.server.KafkaConfig
官网查看地址:http://kafka.apache.org/082/documentation.html#brokerconfigs

1.1. Server Basics

标识此broker的唯一ID,要求是integer类型
Broker.id 默认值:无
broker对外提供的服务端口,默认9092
port 默认值:9092
该broker的主机名,如果设置了则只会绑定这个地址,如果不设置则是监听所有的网络接口
host.name 默认值:null
通知给producer、consuemr、其它的broker的主机名来连接自己,如果没有设置此值会使用host.name的值(如果配置了),否则使用
java.net.InetAddress.getCanonicalHostName()的返回值
advertised.host.name 默认值:null
advertised.host.name对应的端口
advertised.port 默认值:null
处理网络请求的最大线程数
num.network.threads 默认值:3
处理磁盘I/O的线程数
num.io.threads 默认值:8
一些后台线程数比如:删除文件操作,一般不更改此设置
background.threads 默认值: 10
等待IO线程处理的请求队列最大数
queued.max.requests 默认值: 500
socket的发送缓冲区(SO_SNDBUF)
socket.send.buffer.bytes 默认值:100 * 1024
socket的接收缓冲区 (SO_RCVBUF)
socket.receive.buffer.bytes 默认值:100 * 1024
socket请求的最大字节数。为了防止内存溢出,message.max.bytes必然要小于socket.request.max.bytes
socket.request.max.bytes 默认值: 100 * 1024 * 1024

1.2. Log Basics

日志存放目录,多个目录使用逗号分割
log.dirs 默认值:/tmp/kafka-logs
每个topic的默认分区个数,更多的partition会产生更多的segment file
num.partitions 默认值:1
每个数据目录的恢复线程的数目
num.recovery.threads.per.data.dir 默认值:1

1.3. Log Flush Policy

log分区里当达到下面的消息数量时,会将数据flush到日志文件中。
log.flush.interval.messages 默认值:9223372036854775807【Long.MaxValue】
当达到下面的时间(ms)时,执行一次强制的flush操作。interval.ms和interval.messages无论哪个达到,都会flush。
log.flush.interval.ms 默认值:9223372036854775807【Long.MaxValue】
检查是否需要将日志flush的时间间隔
log.flush.scheduler.interval.ms 默认值:9223372036854775807【Long.MaxValue】

1.4. Log Retention Policy

日志清理策略(delete|compact)设置delete会删除那些大小或者时间达到阀值的log segment文件,compact只会清除文件中的过时的记录。【会被topic创建时的指定参数覆盖】
log.cleanup.policy 默认值: delete
日志保存时间 (hours|minutes),默认为7天(168小时)。超过这个时间会根据policy处理数据。bytes和minutes无论哪个先达到都会触发。
log.retention.{ms,minutes,hours}【会被topic创建时的指定参数覆盖】
log.retention.hours 默认值:168
日志数据存储的最大字节数。超过这个时间会根据policy处理数据。-1是不限制。【会被topic创建时的指定参数覆盖】
log.retention.bytes 默认值:-1
控制日志segment文件的大小,超出该大小则追加到一个新的日志segment文件中(-1表示没有限制)
log.segment.bytes 默认值:1024 * 1024 * 1024
当达到下面时间,会强制新建一个segment来使用log.roll.{ms,hours}。【会被topic创建时的指定参数覆盖】
log.roll.hours 默认值:24*7
日志片段文件的检查周期,查看它们是否达到了删除策略的设置(log.retention.{ms,minutes,hours}或log.retention.bytes等)
log.retention.check.interval.ms 默认值:5*60*1000
在从内存索引中清除后,log文件保留的时间。此设置一般不需要去修改
log.delete.delay.ms 默认值:60000
控制上次flush到硬盘的时间点,以便于数据恢复。此配置一般不需要去修改
log.flush.offset.checkpoint.interval.ms 默认值:60000
是否开启压缩。如果要使用compact策略,那么此设置必须为true。
log.cleaner.enable 默认值:false
日志压缩运行的线程数
log.cleaner.threads 默认值:1
对于压缩的日志保留的最长时间
log.cleaner.delete.retention.ms 默认值:24 * 60 * 60 * 1000L
日志压缩时候处理的最大字节数
log.cleaner.io.max.bytes.per.second 默认值:1.7976931348623157E308【Double.MAX_VALUE】
日志压缩去重时候的缓存空间,在空间允许的情况下,越大越好
log.cleaner.dedupe.buffer.size 默认值:500*1024*1024
日志清理时候用到的IO块大小,一般不需要修改
log.cleaner.io.buffer.size 默认值:512*1024
日志清理中hash表的扩大因子,一般不需要修改
log.cleaner.io.buffer.load.factor 默认值:0.9
清理日志的检查间隔
log.cleaner.backoff.ms 默认值:15000
日志清理的频率控制,越大意味着更高效的清理,同时会存在一些空间上的浪费,【会被topic创建时的指定参数覆盖】
log.cleaner.min.cleanable.ratio 默认值:0.5
对于压缩的日志保留的最长时间,也是客户端消费消息的最长时间,同log.retention.{ms,minutes,hours}的区别在于此配置控制压缩后的数据,log.retention.{ms,minutes,hours}控制未压缩数据。【会被topic创建时的指定参数覆盖】
log.cleaner.delete.retention.ms 默认值:24 * 60 * 60 * 1000L
对于segment日志的索引文件大小限制,如果索引文件超过了此值,会新增一个log segment即使没有达到log.segment.bytes。【会被topic创建时的指定参数覆盖】
log.index.size.max.bytes 默认值:10 * 1024 * 1024
索引计算的一个缓冲区,一般不需要设置。
log.index.interval.bytes 默认值:4096

1.5. ZooKeeper

Zookeeper quorum设置。如果有多个使用逗号分割。如果想创建多个集群,可以hostname1:port1,hostname2:port2,hostname3:port3/chroot/path。
zookeeper.connect 默认值:null
连接zk的超时时间
zookeeper.connection.timeout.ms 默认值:6000
ZooKeeper集群中leader和follower之间的同步时间
zookeeper.sync.time.ms 默认值:2000

1.6. Topic

是否允许自动创建topic ,若是false,就需要通过命令创建topic
auto.create.topics.enable 默认值:true
一个topic ,默认分区的replication个数 ,不能大于集群中broker的个数。
default.replication.factor 默认值:1
消息体的最大大小,单位是字节
message.max.bytes 默认值:1000000
是否开启topic的删除功能,如果不开启,执行delete操作后topic只是标记删除,topic还是可以正常使用
delete.topic.enable 默认值:false
1.7. Replica
partition management controller 与replicas之间通讯的超时时间
controller.socket.timeout.ms 默认值:30000
controller-to-broker-channels消息队列的尺寸大小
controller.message.queue.size 默认值:2147483647【Int.MaxValue】
replicas响应leader的最长等待时间,若是超过这个时间,就将replicas排除在管理之外
replica.lag.time.max.ms 默认值:10000
是否允许控制器关闭broker ,若是设置为true,会关闭所有在这个broker上的leader,并转移到其他broker
controlled.shutdown.enable 默认值:true
控制器关闭的尝试次数
controlled.shutdown.max.retries 默认值:3
每次关闭尝试的时间间隔
controlled.shutdown.retry.backoff.ms 默认值:5000
如果relicas落后超过了此值,将会认为此partition relicas已经失效。而一般情况下,因为网络延迟等原因,总会导致replicas中消息同步滞后。如果消息严重滞后,leader将认为此relicas网络延迟较大或者消息吞吐能力有限。在broker数量较少,或者网络不足的环境中,建议提高此值.
replica.lag.max.messages 默认值:4000
leader与relicas的socket超时时间
replica.socket.timeout.ms 默认值:30 * 1000
leader复制的socket缓存大小
replica.socket.receive.buffer.bytes 默认值:64 * 1024
replicas每次获取数据的最大字节数
replica.fetch.max.bytes 默认值:1024 * 1024
replicas同leader之间通信的最大等待时间,失败了会重试
replica.fetch.wait.max.ms 默认值:500
每一个fetch操作的最小数据尺寸,如果leader中尚未同步的数据不足此值,将会等待直到数据达到这个大小
replica.fetch.min.bytes 默认值:1
leader中进行复制的线程数,增大这个数值会增加relipca的IO
num.replica.fetchers 默认值:1
每个replica将最高水位进行flush的时间间隔
replica.high.watermark.checkpoint.interval.ms 默认值:5000
是否自动平衡broker之间的分配策略
auto.leader.rebalance.enable 默认值:true
leader的不平衡比例,若是超过这个数值,会对分区进行重新的平衡
leader.imbalance.per.broker.percentage 默认值:10
检查leader是否不平衡的时间间隔
leader.imbalance.check.interval.seconds 默认值:300
客户端保留offset信息的最大空间大小
offset.metadata.max.bytes 默认值:4096

2. Consumer

Consumer端核心的配置:group.id、zookeeper.connect
相关代码的查看类:kafka.consumer.ConsumerConfig
官网查看地址:http://kafka.apache.org/082/documentation.html#consumerconfigs
决定该Consumer归属的唯一组ID,By setting the same group id multiple processes indicate that they are all part of the same consumer group.
group.id 默认值:无
消费者的ID,若是没有设置的话,会自增
consumer.id 默认值:null
一个用于跟踪调查的ID ,最好同group.id相同
client.id 默认值:
对于zookeeper集群的指定,必须和broker使用同样的zk配置
zookeeper.connect 默认值:无
zookeeper的心跳超时时间,超过这个时间就认为是无效的消费者
zookeeper.session.timeout.ms 默认值:6000
zookeeper的等待连接时间
zookeeper.connection.timeout.ms 默认值:6000
zookeeper的follower同leader的同步时间
zookeeper.sync.time.ms 默认值:2000
当zookeeper中没有初始的offset时,或者超出offset上限时的处理方式 。
smallest :重置为最小值
largest:重置为最大值
anything else:抛出异常给consumer
auto.offset.reset 默认值:largest
socket的超时时间,实际的超时时间为max.fetch.wait + socket.timeout.ms.
socket.timeout.ms 默认值:30 * 1000
socket的接收缓存空间大小
socket.receive.buffer.bytes 默认值:64 * 1024
从每个分区fetch的消息大小限制
fetch.message.max.bytes 默认值:1024 * 1024
true时,Consumer会在消费消息后将offset同步,这样当Consumer失败后,新的consumer就能获取最新的offset
auto.commit.enable 默认值:true
自动提交的时间间隔
auto.commit.interval.ms 默认值:60 * 1000
用于消费的最大数量的消息块缓冲大小,每个块可以等同于fetch.message.max.bytes中数值
queued.max.message.chunks 默认值:2
当有新的consumer加入到group时,将尝试reblance,将partitions的消费端迁移到新的consumer中, 该设置是尝试的次数
rebalance.max.retries 默认值:4
每次reblance的时间间隔
rebalance.backoff.ms 默认值:2000
每次重新选举leader的时间
refresh.leader.backoff.ms 默认值:200
server发送到消费端的最小数据,若是不满足这个数值则会等待直到满足指定大小。默认为1表示立即接收。
fetch.min.bytes 默认值:1
若是不满足fetch.min.bytes时,等待消费端请求的最长等待时间
fetch.wait.max.ms 默认值:100
如果指定时间内没有新消息可用于消费,就抛出异常,默认-1表示不受限
consumer.timeout.ms 默认值:-1
选择存储offset的地方(zookeeper or kafka).
offsets.storage 默认值:zookeeper
partition对与consuemr的分配策略设置 “range” or “roundrobin”
Partition.assignment.strategy 默认值:range

3. Producer

核心的配置包括:metadata.broker.list、request.required.acks、producer.type、serializer.class
相关代码的查看类:
kafka.producer.ProducerConfig:一般的配置文件
kafka.producer.async.AsyncProducerConfig:异步生产者的配置文件
官方查看地址:http://kafka.apache.org/082/documentation.html#producerconfigs

3.1. common

生产者获取消息元信息(topics, partitions and replicas)的地址,配置格式是:host1:port1,host2:port2,也可以在外面设置一个vip
metadata.broker.list 默认值:无
消息的确认模式
0:不保证消息的到达确认,只管发送,低延迟但是会出现消息的丢失,在某个server失败的情况下,有点像TCP
1:发送消息,并会等待leader 收到确认后,一定的可靠性
-1:发送消息,等待leader收到确认,并进行复制操作后,才返回,最高的可靠性
request.required.acks 默认值:0
消息发送的最长等待时间
request.timeout.ms 默认值:10000
生产方式 同步:sync、异步:async
producer.type 默认值:sync
socket的缓存大小
send.buffer.bytes 默认值:100*1024
msg的序列化方式
serializer.class 默认值:kafka.serializer.DefaultEncoder
key的序列化方式,若是没有设置,同serializer.class
key.serializer.class 默认值:serializer.class
分区的策略,默认是根据key做hash运算再对总partition数取余。
partitioner.class 默认值:kafka.producer.DefaultPartitioner
消息的压缩模式,默认是none,可以有gzip和snappy
compression.codec 默认值:none
可以针对默写特定的topic进行压缩
compressed.topics 默认值:null
消息发送失败后的重试次数
message.send.max.retries 默认值:3
每次失败后的间隔时间
retry.backoff.ms 默认值:100
生产者定时更新topic元信息的时间间隔 ,若是设置为0,那么会在每个消息发送后都去更新数据
topic.metadata.refresh.interval.ms 默认值:600 * 1000
用户随意指定,但是不能重复,主要用于跟踪记录消息
client.id 默认值:””

3.2. async

异步模式下缓冲数据的最大时间。例如设置为100则会集合100ms内的消息后发送,这样会提高吞吐量,但是会增加消息发送的延时
queue.buffering.max.ms 默认值:5000
异步模式下缓冲的最大消息数,同上
queue.buffering.max.messages 默认值:10000
异步模式下,消息进入队列的等待时间。若是设置为0,则消息不等待,如果进入不了队列,则直接被抛弃
queue.enqueue.timeout.ms 默认值:-1
异步模式下,每次发送的消息数,当queue.buffering.max.messages或queue.buffering.max.ms满足条件之一时producer会触发发送。
batch.num.messages 默认值:200

4. Server配置示例

Replication configurations
num.replica.fetchers=4
replica.fetch.max.bytes=1048576
replica.fetch.wait.max.ms=500
replica.high.watermark.checkpoint.interval.ms=5000
replica.socket.timeout.ms=30000
replica.socket.receive.buffer.bytes=65536
replica.lag.time.max.ms=10000
replica.lag.max.messages=4000

controller.socket.timeout.ms=30000
controller.message.queue.size=10

Log configuration
num.partitions=8
message.max.bytes=1000000
auto.create.topics.enable=true
log.index.interval.bytes=4096
log.index.size.max.bytes=10485760
log.retention.hours=168
log.flush.interval.ms=10000
log.flush.interval.messages=20000
log.flush.scheduler.interval.ms=2000
log.roll.hours=168
log.retention.check.interval.ms=300000
log.segment.bytes=1073741824

ZK configuration
zookeeper.connection.timeout.ms=6000
zookeeper.sync.time.ms=2000

Socket server configuration
num.io.threads=8
num.network.threads=8
socket.request.max.bytes=104857600
socket.receive.buffer.bytes=1048576
socket.send.buffer.bytes=1048576
queued.max.requests=16
fetch.purgatory.purge.interval.requests=100
producer.purgatory.purge.interval.requests=100

1 0
原创粉丝点击