Kafka 配置参数汇总及相关说明

Kafka为broker,producer和consumer提供了很多的配置参数。 了解并理解这些配置参数对于我们使用kafka是非常重要的。
本文列出了一些重要的配置参数。

官方的文档 Configuration比较老了,很多参数有所变动, 有些名字也有所改变。我在整理的过程中根据0.8.2的代码也做了修正。

Boker配置参数

下表列出了Boker的重要的配置参数, 更多的配置请参考 kafka.server.KafkaConfig

name 默认值 描述

brokerid

none

每一个boker都有一个唯一的id作为它们的名字。 这就允许boker切换到别的主机/端口上, consumer依然知道

enable.zookeeper

true

允许注册到zookeeper

log.flush.interval.messages

Long.MaxValue

在数据被写入到硬盘和消费者可用前最大累积的消息的数量

log.flush.interval.ms

Long.MaxValue

在数据被写入到硬盘前的最大时间

log.flush.scheduler.interval.ms

Long.MaxValue

检查数据是否要写入到硬盘的时间间隔。

log.retention.hours

168

控制一个log保留多长个小时

log.retention.bytes

-1

控制log文件最大尺寸

log.cleaner.enable

false

是否log cleaning

log.cleanup.policy

delete

delete还是compat. 其它控制参数还包括log.cleaner.threads,log.cleaner.io.max.bytes.per.second,log.cleaner.dedupe.buffer.size,log.cleaner.io.buffer.size,log.cleaner.io.buffer.load.factor,log.cleaner.backoff.ms,log.cleaner.min.cleanable.ratio,log.cleaner.delete.retention.ms

log.dir

/tmp/kafka-logs

指定log文件的根目录

log.segment.bytes

110241024*1024

单一的log segment文件大小

log.roll.hours

24 * 7

开始一个新的log文件片段的最大时间

message.max.bytes

1000000 + MessageSet.LogOverhead

一个socket 请求的最大字节数

num.network.threads

3

处理网络请求的线程数

num.io.threads

8

处理IO的线程数

background.threads

10

后台线程序

num.partitions

1

默认分区数

socket.send.buffer.bytes

102400

socket SO_SNDBUFF参数

socket.receive.buffer.bytes

102400

socket SO_RCVBUFF参数

zookeeper.connect

localhost:2182/kafka

指定zookeeper连接字符串, 格式如hostname:port/chroot。chroot是一个namespace

zookeeper.connection.timeout.ms

6000

指定客户端连接zookeeper的最大超时时间

zookeeper.session.timeout.ms

6000

连接zk的session超时时间

zookeeper.sync.time.ms

2000

zk follower落后于zk leader的最长时间

High-levelConsumer配置参数

下表列出了high-level consumer的重要的配置参数。
更多的配置请参考 kafka.consumer.ConsumerConfig

name

默认值

描述

groupid

groupid

一个字符串用来指示一组consumer所在的组

socket.timeout.ms

30000

socket超时时间

socket.buffersize

64*1024

socket receive  buffer

fetch.size

300 * 1024

控制在一个请求中获取的消息的字节数。 这个参数在0.8.x中由fetch.message.max.bytes,fetch.min.bytes取代

backoff.increment.ms

1000

这个参数避免在没有新数据的情况下重复频繁的拉数据。 如果拉到空数据,则多推后这个时间

queued.max.message.chunks

2

high level  consumer内部缓存拉回来的消息到一个队列中。 这个值控制这个队列的大小

auto.commit.enable

true

如果true,consumer定期地往zookeeper写入每个分区的offset

auto.commit.interval.ms

10000

往zookeeper上写offset的频率

auto.offset.reset

largest

如果offset出了返回,则 smallest: 自动设置reset到最小的offset. largest : 自动设置offset到最大的offset. 其它值不允许,会抛出异常.

consumer.timeout.ms

-1

默认-1,consumer在没有新消息时无限期的block。如果设置一个正值, 一个超时异常会抛出

rebalance.retries.max

4

rebalance时的最大尝试次数

Producer配置参数

下表列出了producer的重要的参数。
更多的配置请参考 kafka.producer.ProducerConfig

name

默认值

描述

serializer.class

kafka.serializer.DefaultEncoder

必须实现kafka.serializer.Encoder接口,将T类型的对象encode成kafka message

key.serializer.class

serializer.class

key对象的serializer类

partitioner.class

kafka.producer.DefaultPartitioner

必须实现kafka.producer.Partitioner,根据Key提供一个分区策略

producer.type

sync

指定消息发送是同步还是异步。异步asyc成批发送用kafka.producer.AyncProducer, 同步sync用kafka.producer.SyncProducer

metadata.broker.list

boker list

使用这个参数传入boker和分区的静态信息,如host1:port1,host2:port2, 这个可以是全部boker的一部分

compression.codec

NoCompressionCodec

消息压缩,默认不压缩

compressed.topics

null

在设置了压缩的情况下,可以指定特定的topic压缩,为指定则全部压缩

message.send.max.retries

3

消息发送最大尝试次数

retry.backoff.ms

300

每次尝试增加的额外的间隔时间

topic.metadata.refresh.interval.ms

600000

定期的获取元数据的时间。当分区丢失,leader不可用时producer也会主动获取元数据,如果为0,则每次发送完消息就获取元数据,不推荐。如果为负值,则只有在失败的情况下获取元数据。

queue.buffering.max.ms

5000

在producer queue的缓存的数据最大时间,仅仅for asyc

queue.buffering.max.message

10000

producer 缓存的消息的最大数量,仅仅for asyc

queue.enqueue.timeout.ms

-1

0当queue满时丢掉,负值是queue满时block,正值是queue满时block相应的时间,仅仅for asyc

batch.num.messages

200

一批消息的数量,仅仅for asyc

request.required.acks

0

0表示producer毋须等待leader的确认,1代表需要leader确认写入它的本地log并立即确认,-1代表所有的备份都完成后确认。 仅仅for sync

request.timeout.ms

10000

确认超时时间

kafka.serializer.DefaultEncoder
默认的这个Encoder事实上不做任何处理,接收到什么byte[]就返回什么byte[]:

  1. class DefaultEncoder(props: VerifiableProperties = null) extends Encoder[Array[Byte]] {
  2. override def toBytes(value: Array[Byte]): Array[Byte] = value
  3. }

复制代码

NullEncoder则不管接收什么都返回null:

  1. class NullEncoder[T](props: VerifiableProperties = null) extends Encoder[T] {
  2. override def toBytes(value: T): Array[Byte] = null
  3. }

复制代码

StringEncoder则返回字符串,默认UTF-8格式:

  1. class StringEncoder(props: VerifiableProperties = null) extends Encoder[String] {
  2. val encoding =
  3. if(props == null)
  4. "UTF8"
  5. else
  6. props.getString("serializer.encoding", "UTF8")
  7. override def toBytes(s: String): Array[Byte] =
  8. if(s == null)
  9. null
  10. else
  11. s.getBytes(encoding)
  12. }

复制代码

kafka.producer.DefaultPartitioner
默认的分区函数为DefaultPartitioner,它根据key的hashcode与分区数取余,得到相应的分区。

  1. class DefaultPartitioner(props: VerifiableProperties = null) extends Partitioner {
  2. private val random = new java.util.Random
  3. def partition(key: Any, numPartitions: Int): Int = {
  4. Utils.abs(key.hashCode) % numPartitions
  5. }
  6. }

复制代码

但是如果key为null时会发送到哪个分区?在一定时间内往一个特定的分区发送,超过一定时间又会随机选择一个,请参考key为null时Kafka会将消息发送给哪个分区?.所以推荐你发送Kafka消息时总是指定一个key,以便消息能均匀的分到每个分区上。

转载:http://www.aboutyun.com/thread-12211-1-1.html

时间: 07-03

Kafka 配置参数汇总及相关说明的相关文章

kafka配置参数

Kafka为broker,producer和consumer提供了很多的配置参数. 了解并理解这些配置参数对于我们使用kafka是非常重要的.本文列出了一些重要的配置参数. 官方的文档 Configuration比较老了,很多参数有所变动, 有些名字也有所改变.我在整理的过程中根据0.8.2的代码也做了修正. Boker配置参数 下表列出了Boker的重要的配置参数, 更多的配置请参考 kafka.server.KafkaConfig name 默认值 描述 brokerid none 每一个b

Redis配置参数汇总

==配置文件全解=== ==基本配置daemonize no 是否以后台进程启动databases 16 创建database的数量(默认选中的是database 0) save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化.save 300 10 #必须是300秒之后至少10个关键字发生变化.save 60 10000 #必须是60秒之后至少10000个关键字发生变化.stop-writes-on-bgsave-error yes #后台存储错

kafka实战 - 处理大文件需要注意的配置参数

概述 kafka配置参数有很多,可以做到高度自定义.但是很多用户拿到kafka的配置文件后,基本就是配置一些host,port,id之类的信息,其他的配置项采用默认配置,就开始使用了.这些默认配置是经过kafka官方团队经过严谨宽泛的测试之后,求到的最优值.在单条信息很小,大部分场景下都能得到优异的性能.但是如果想使用kafka存储一些比较大的,比如100M以上的数据,这些默认的配置参数就会出现各种各样的问题. 我们的业务是数据大小没有什么规律,小的只有几kb,大的可能有几百M.为了使得整体架构

haproxy配置参数详解

一.CentOS 6.6 HAProxy安装配置指南 下面来进行配置文件的详细参数介绍,更多参数还请查看官方手册, 下面贴出我的配置文件,我的实验环境是一台服务器安装了三个tomcat容器,前端用haproxy对三个tomcat负载均衡. #--------------------------------------------------------------------- # Example configuration for a possible web application.  Se

【原创】MySQL性能优化-I/O相关配置参数

本文介绍InnoDB和MyISAM两种存储引擎的I/O相关参数配置. 1.InnoDB  I/O相关配置 Innodb是一种事务型的存储引擎,为了减少提交事务时产生的io开销,innodb采用了写日志的方式,也就是在事务提交的时候会先写入事务日志中 ,而不是每次都把修改或者数据刷新到数据文件中,这样做是为了提高io的性能,因为事务的修改,使数据和索引文件通常都会映射到表空间随机的位置,所以刷新数据变更到数据文件会产生大量随机io,而记录日志是顺序io,一旦事务日志安全的写到磁盘中,数据就算是持久

Hadoop YARN配置参数剖析—RM与NM相关参数

注意,配置这些参数前,应充分理解这几个参数的含义,以防止误配给集群带来的隐患.另外,这些参数均需要在yarn-site.xml中配置. 1.    ResourceManager相关配置参数 (1) yarn.resourcemanager.address 参数解释:ResourceManager 对客户端暴露的地址.客户端通过该地址向RM提交应用程序,杀死应用程序等. 默认值:${yarn.resourcemanager.hostname}:8032 (2) yarn.resourcemana

常见虚拟机堆相关的配置参数

堆相关的配置参数 -Xmx 最大堆空间 -Xms 初始堆空间大小,如果初始堆空间耗尽,JVM会对堆空间扩容,其扩展上限为最大堆空间.通常-Xms与-Xmx设置为同样大小,避免扩容造成性能损耗. -Xmn 设置新生代大小,设置一个较大的新生代会减少老年代的大小,新生代的大小一般设置为整个堆空间的1/3 或者1/4. -XX:SurvivorRatio 设置新生代中eden空间和from/to空间的比例关系. -XX:SurvivorRatio=eden/from=eden/to 例如:-Xmx20

ETCD相关配置参数

ETCD配置参数 原文地址:https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/configuration.md 成员标记 --name 人类可读的该成员的名字 默认值:"default" 环境变量:ETCD_NAME 该值被该节点吃的--initial-cluster参数引用(例如 default=http://localhost:2380).如果使用静态引导程序,则需要与标志中使用的键匹配.当使用发现

(三)Kafka0.8.2官方文档中文版系列-topic配置参数

前文链接: (一)Kafka0.8.2官方文档中文版系列-入门指南 (二)Kafka0.8.2官方文档中文版系列-API Topic-level configuration(主题级别的参数配置) 与主题相关的配置具有全局默认值(参考broker部分)和每个主题可选重写(broker部分有明确提示).如果主题没有重写这些配置,使用全局默认设置.可以使用--config添加一个或者多个自定义选项.下面这个例子创建了一个名为my-topic的主题,它自定义了最大消息大小和刷新速率: > bin/kaf