kafka配置参数详解Broker Configs
Property Default Description
broker.id 每个broker都可以⽤⼀个唯⼀的⾮负整数id进⾏标识;这个id可以作为broker的“名字”,并且它的存在使得broker⽆须混淆consumers就可以迁移到不同的host/port上。你可以选择任意你喜欢的数字作为id,只要id是唯⼀的即可。
log.dirs/tmp/kafka-logs kafka存放数据的路径。这个路径并不是唯⼀的,可以是多个,路径之间只需要使⽤逗号分隔即可;每当创建新partition时,都会选择在包含最少partitions的路径下进⾏。
port6667rver接受客户端连接的端⼝
hostname1:port1,hostname2:port2,hostname3:
port3/chroot/path
这样设置就将所有kafka集群数据存放在/chroot/path路径下。注意,在你启动broker之前,你必须创建这个路径,并且consumers必须使⽤相同的连接格式。
message.max.bytes1000000rver可以接收的消息最⼤尺⼨。重要的是,consumer和producer有关这个属性的设置必须同步,否则producer发布的消息对consumer来说太⼤。
numwork.threads3rver⽤来处理⽹络请求的⽹络线程数⽬;⼀般你不需要更改这个属性。
num.io.threads8rver⽤来处理请求的I/O线程的数⽬;这个线程数⽬⾄少要等于硬盘的个数。
background.threads4⽤于后台处理的线程数⽬,例如⽂件删除;你不需要更改这个
属性。
quests500在⽹络线程停⽌读取新请求之前,可以排队等待I/O线程处理的
最⼤请求个数。
host.name null broker的hostname;如果hostname已经设置的话,broker将只会绑定到这个地址上;如果没有设置,它将绑定到所有接⼝,并发布⼀份到ZK
advertid.host.name null如果设置,则就作为broker 的hostname发往producer、
consumers以及其他brokers
advertid.port null 此端⼝将给与producers、consumers、以及其他brokers,它会在建⽴连接时⽤到;它仅在实际端⼝和rver需要绑定的端⼝不⼀样时才需要设置。
socket.nd.buffer.bytes100 * 1024SO_SNDBUFF 缓存⼤⼩,rver进⾏socket 连接所⽤ive.buffer.bytes100 * 1024SO_RCVBUFF缓存⼤⼩,rver进⾏socket连接时所⽤
num.partitions1如果创建topic时没有给出划分partitions个数,这个数字将是
topic下partitions数⽬的默认数值。
查看
牛骨汤面
查看
查看log.cleanup.policy delete
甜蜜的我爱你
这个属性设置可以在topic基本设置时进⾏覆盖。
查看
注意,这项设置可以由每个topic设置时进⾏覆盖。
查看
删除要求。
able fal 当这个属性设置为fal时,⼀旦⽇志的保存时间或者⼤⼩达到上限时,就会被删除;如果设置为true,则当保存属性达到上限时,就会进⾏。
炫迈广告词log.cleaner.threads1进⾏⽇志压缩的线程数
log.cleaner.io.max.d None进⾏log compaction时,log cleaner可以拥有的最⼤I/O数⽬。
这项设置限制了cleaner,以避免⼲扰活动的请求服务。
log.cleaner.io.buffer.size500*1024*1024log cleaner清除过程中针对⽇志进⾏索引化以及精简化所⽤到的缓存⼤⼩。最好设置⼤点,以提供充⾜的内存。
log.cleaner.io.buffer.load.factor512*1024进⾏log cleaning时所需要的I/O chunk尺⼨。你不需要更改这
项设置。
log.cleaner.io.buffer.load.factor0.9log cleaning中所使⽤的hash表的负载因⼦;你不需要更改这个选项。
log.cleaner.backoff.ms15000进⾏⽇志是否清理检查的时间间隔
log.cleaner.min.cleanable.ratio0.5这项配置控制log compactor试图清理⽇志的频率(假定是打开的)。默认避免清理压缩超过50%的⽇志。这个⽐率绑定了备份⽇志所消耗的最⼤空间(50%的⽇志备份时压缩率为50%)。更⾼的⽐率则意味着浪费消耗更少,也就可以更有效的清理更多的空间。这项设置在每个topic设置中可以覆盖。查看。
log.ion.ms1day 保存时间;保存压缩⽇志的最长时间;也是客户端消费消息的最
长时间,荣ion.minutes的区别在于⼀个控制未压缩数据,⼀个控制压缩后的数据;会被topic创建时的指定时间覆盖。
log.index.size.max.bytes10*1024*1024每个log gment的最⼤尺⼨。注意,如果log尺⼨达到这个数值,即使尺⼨没有超过bytes限制,也需要产⽣新的log gment。
log.index.interval.bytes4096当执⾏⼀次fetch后,需要⼀定的空间扫描最近的offt,设置
的越⼤越好,⼀般使⽤默认值就可以
log.ssages Long.MaxValue log⽂件“sync”到磁盘之前累积的消息条数。因为磁盘IO操作是⼀个慢操作,但⼜是⼀个“数据可靠性”的必要⼿段,所以检查是否需要固化到硬盘的时间间隔。需要在“数据可靠性”与“性能”之间做必要的权衡,如果此值过⼤,将会导致每次“发sync”的时间过长(IO阻塞),如果此值过⼩,将会导
致“fsync”的时间较长(IO阻塞),如果此值过⼩,将会导致”发sync“的次数较多,这也就意味着整体的client请求有⼀定的延迟,物理rver故障,将会导致没有fsync的消息丢失。
log.flush.scheduler.interval.ms Long.MaxValue检查是否需要fsync的时间间隔
log.flush.interval.ms Long.MaxValue 仅仅通过interval来控制消息的磁盘写⼊时机,是不⾜的,这个数⽤来控制”fsync“的时间间隔,如果消息量始终没有达到固化到磁盘的消息数,但是离上次磁盘同步的时间间隔达到阈值,也将触发磁盘同步。
log.delete.delay.ms60000⽂件在索引中清除后的保留时间,⼀般不需要修改
controller.socket.timeout.ms30000partition管理控制器进⾏备份时,socket的超时时间。ssage.queue.size Int.MaxValue controller-to-broker-channles的buffer 尺⼨
replica.lag.time.max.ms10000如果⼀个follower在这个时间内没有发送fetch请求,leader将从
ISR重移除这个follower,并认为这个follower已经挂了
replica.ssages4000如果⼀个replica没有备份的条数超过这个数值,则leader将移
除这个follower,并认为这个follower已经挂了
replica.socket.timeout.ms30*1000leader 备份数据时的socket⽹络请求的超时时间
ive.buffer.bytes64*1024备份时向leader发送⽹络请求时的socket receive buffer replica.fetch.max.bytes1024*1024备份时每次fetch的最⼤值
replica.fetch.min.bytes500leader发出备份请求时,数据到达leader的最长等待时间replica.fetch.min.bytes1备份时每次fetch之后回应的最⼩尺⼨
replica.high.watermark.checkpoint.interval.ms5000每个replica检查是否将最⾼⽔位进⾏固化的频率
fetch.purgatory.quests1000fetch 请求清除时的清除间隔
producer.purgatory.quests1000producer请求清除时的清除间隔
坚强的图片zookeeper.ssion.timeout.ms6000zookeeper会话超时时间。
me.ms2000zk follower落后于zk leader的最长时间
服装图案able true 是否能够控制broker的关闭。如果能够,broker将可以移动所有leaders到其他的broker上,在关闭之前。这减少了不可⽤性在关机过程中。
controlled.ies3在执⾏不彻底的关机之前,可以成功执⾏关机的命令数。backoff.ms5000在关机之间的backoff时间
able true如果这是true,控制者将会⾃动平衡brokers对于partitions的
leadership
leader.imbalance.per.broker.percentage10每个broker所允许的leader最⼤不平衡⽐率
leader.imbalance.ds300检查leader不平衡的频率
s600000空连接的超时限制
unclean.able true指明了是否能够使不在ISR中replicas设置⽤来作为able fal能够删除topic
topic的offt的备份份数。建议设置更⾼的数字保证更⾼的可
⽤性
offts.load.buffer.size5242880这项设置与批量尺⼨相关,当从offts gment中读取时使
⽤。
需要更改
Property Default Server Default Property Description
要么是”delete“要么是”compact“;这个字符串指
cleanup.policy delete log.cleanup.policy 要么是”delete“要么是”compact“;这个字符串指明了针对旧⽇志部分的利⽤⽅式;默认⽅式("delete")将会丢弃旧的部分当他们的回收时间或者尺⼨限制到达时。”compact“将会进⾏⽇志压缩
flush.ms None log.flush.interval.ms 此项配置⽤来置顶强制进⾏fsync⽇志到磁盘的时间间隔;例如,如果设置为1000,那么每1000ms就需要进⾏⼀次fsync。⼀般不建议使⽤这个选项
东北风味
index.interval.bytes4096log.index.interval.bytes 默认设置保证了我们每4096个字节就对消息添加⼀个索引,更多的索引使得阅读的消息更加靠近,但是索引规模却会由此增⼤;⼀般不需要改变这个选项
min.cleanable.dirty.ratio0.5min.cleanable.dirty.ratio 此项配置控制log压缩器试图进⾏清除⽇志的频率。默认情况下,将避免清除压缩率超过50%的⽇志。这个⽐率避免了最⼤的空间浪费
plicas 当producer设置quired.acks为-1
时,plicas指定replicas的最⼩数⽬(必须确认每⼀个repica的写数据都是成功的),如果这个数⽬没有达到,producer会产⽣异常。
retention.bytes ion.bytes 如果使⽤“delete”的retention 策略,这项配置就是指在删除⽇志之前,⽇志所能达到的最⼤尺⼨。默认情况下,没有尺⼨限制⽽只有时间限制
retention.ms7 ion.minutes 如果使⽤“delete”的retention策略,这项配置就是指删除⽇志前⽇志保存的时间。
gment.bytes kafka中log⽇志是分成⼀块块存储的,此配置是指log⽇志划分成块的⼤⼩
gment.index.bytes10MB log.index.size.max.bytes此配置是有关offts和⽂件位置之间映射的索引
⽂件的⼤⼩;⼀般不需要修改这个配置
gment.ms7 ll.hours 即使log的分块⽂件没有达到需要删除、压缩的⼤⼩,⼀旦log 的时间达到这个上限,就会强制新建⼀个log分块⽂件
gment.jitter.ll.jitter.{ms,hours}The maximum jitter to subtract from logRollTimeMillis.
Consumer Configs
Property Default Description
group.id⽤来唯⼀标识consumer进程所在组的字符串,如果设置同样的
group id,表⽰这些process都是属于同⼀个consumer group
hostname1:port1,hostname2:port2,hostname3:port3
可以在zookeeper连接字符串中加⼊zookeeper的chroot路径,此路径⽤于存放他⾃⼰的数据,⽅式:
hostname1:port1,hostname2:port2,hostname3:
port3/chroot/path
consumer.id null不需要设置,⼀般⾃动产⽣
socket.timeout.ms30*100⽹络请求的超时限制。真实的超时限制是
max.fetch.wait+socket.timeout.ive.buffer.bytes64*1024socket⽤于接收⽹络请求的缓存⼤⼩
ssage.chunks2⽤于缓存消息的最⼤数⽬,以供consumption。每个chunk必须和
ies4当新的consumer加⼊到consumer group时,consumers集合试图重新平衡分配到每个consumer的partitions数⽬。如果consumers 集合改变了,当分配正在执⾏时,这个重新平衡会失败并重⼊
中小学生行为守则fetch.min.bytes1每次fetch请求时,rver应该返回的最⼩字节数。如果没有⾜够的
数据返回,请求会等待,直到⾜够的数据才会返回。
fetch.wait.max.ms100如果没有⾜够的数据能够满⾜fetch.min.bytes,则此项配置是指在
应答fetch请求之前,rver会阻塞的最⼤时间。
rebalance.backoff.ms2000在重试reblance之前backoff时间
refresh.leader.backoff.ms200在试图确定某个partition的leader是否失去他的leader地位之前,
需要等待的backoff时间
largest zookeeper中没有初始化的offt时,如果offt是以下值的回应:smallest:⾃动复位offt为smallest的offt
钢筋单位largest:⾃动复位offt为largest的offt
anything el:向consumer抛出异常
consumer.timeout.ms-1如果没有消息可⽤,即使等待特定的时间之后也没有,则抛出超
时异常
pics true是否将内部topics的消息暴露给consumer
paritition.assignment.strategy range选择向consumer 流分配partitions的策略,可选值:
range,roundrobin
client.id group id value是⽤户特定的字符串,⽤来在每次请求中帮助跟踪调⽤。它应该
可以逻辑上确认产⽣这个请求的应⽤
zookeeper.ssion.timeout.ms6000zookeeper 会话的超时限制。如果consumer在这段时间内没有向zookeeper发送⼼跳信息,则它会被认为挂掉了,并且reblance将会产⽣
offts.storage zookeeper⽤于存放offts的地点: zookeeper或者kafka
offt.channel.backoff.ms1000重新连接offts channel或者是重试失败的offt的fetch/commit请