Hefery 的个人网站

Hefery's Personal Website

Contact:hefery@126.com
  menu
73 文章
0 浏览
0 当前访客
ღゝ◡╹)ノ❤️

Kafka配置解析

PropertyDefaultDescription
broker.id 每个 broker 都可以用一个唯一的非负整数 id 标识;这个 id 可以作为 broker 的名字,它的存在使得 broker 无须混淆 consumers 就可迁移到不同的 host/port。可选择任意数字作为 id,只要 id 唯一
log.dirs/tmp/kafka-logskafka 存放数据的路径。不唯一, 可以是多个,路径之间只需要使用逗号分隔即可;每当创建新 partition 时,都会选择在包含最少 partitions 的路径下进行
port9092server 接受客户端连接的端口
zookeeper.connectlocalhost:2181ZK连接字符串的格式为: hostname:port,此处 hostname 和 port 分 别是 ZK集群中某个节点的 host 和 port;为了当某个 host 宕掉之后你能通过其他 ZK 节点进行连接,可以按照一下方 式制定多个 hosts: hostname1:port1, hostname2:port2, hostname3:port3. ZK允许你增加一个“chroot”路径,将集群中所有 kafka 数据存放在特定的路径下。当多个 Kafka 集群或者其他应用使用相同。ZK集群时,可以使用这个方式设置数 据存放路径。这种方式的实现可以通过这样设置 连接字符串格式,如下所示: hostname1:port1,hostname2:port2, hostname3:port3/chroot/path 就将所有 kafka 集群数据存放在 /chroot/path 路径下
message.max.bytes1000000server 可以接收的消息最大尺寸。重要的是,consumer 和 producer 有关这个属性的设置必须同步,否则 producer 发布的消息对 consumer 来说太大
num.network.threads3server 处理网络请求的网络线程数目;一般不需要更改这个属性
num.io.threads8server 用来处理请求的 I/O 线程的数目;这个线程数目至少要等于硬盘的个数
background.threads4用于后台处理的线程数目,如文件删除;不需要更改这个属性
queued.max.requests500在网络线程停止读取新请求前,可排队等待 I/O 线程处理最大请求个数
host.namenullbroker 的 hostname;如 hostname 已经设置的话,broker 只会绑定到这个地址;如果没有设置,将绑定到所有接口,并发布一份到 ZK
advertised.host.namenull如果设置,则就作为 broker 的 hostname 发往 producer、consumers 以及其他 brokers
advertised.portnull此端口将给与 producers、consumers、以及其他 brokers,它会在建立连接时用到; 它仅在实际端口和 server 需要绑定的端口不一样时需设置
socket.send.buffer.bytes100 * 1024SO_SNDBUFF 缓存大小,server 进行 socket 连接所用
socket.receive.buffer.bytes100 * 1024SO_RCVBUFF 缓存大小,server 进行 socket 连接时所用
socket.request.max.bytes100 * 1024 * 1024server允许的最大请求尺寸; 这将避免server 溢出,应该小于 Java heap size
num.partitions1如创建 topic 时没给出划分 partitions 个数,将是 topic 下 partitions 数目默认数值
log.segment.bytes1014*1024*1024topic partition; 当尺寸达到这个数值时,就会创建新文件。此设置可由每个 topic 基础设置时进行覆盖
log.roll.hours24 * 7即使文件没有到达 log.segment.bytes,只要文件创建时间到达此属性,就会创建新文件。这个设置也可以有 topic 层面的设置进行覆盖
log.cleanup.policydelete
log.retention.minutes 和 log.retention.hours7 days每个日志文件删除之前保存的时间。默认数据保 存时间对所有 topic 都一样。 log.retention.minutes 和 log.retention.bytes 都是用来设置删除日志文件,无论哪个属性已经溢出。这个属性设置可在 topic 基本设置时进行覆盖
log.retention.bytes-1每个 topic 下每个 partition 保存数据的总量; 这是每个 partitions 的上限,因此这个数 值乘以 partitions 的个数就是每个 topic 保存的数据总量。如果 log.retention.hours 和 log.retention.bytes 都设置,则超过了任何一个限制都会造成删除一个段文件。 这项设置可由每个 topic 设置时进行覆盖
log.retention.check.interval.ms5 minutes检查日志分段文件的间隔时间,以确定是否文件 属性是否到达删除要求
log.cleaner.enablefalse当这个属性设置为 false 时,一旦日志的保存时 间或者大小达到上限时,就会被删除;如果设置 为 true,则当保存属性达到上限时,就会进行 log compaction
log.cleaner.threads1进行日志压缩的线程数
log.cleaner.io.max.bytes.per.secondNone进行 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试图清理日志的频率(log compaction 打开)。默认避免清理压缩超过 50%的日志。这个比率绑定 了备份日志所消耗的最大空间(50%的日志备份时压缩率为 50%)。更高的比率则意味着浪费消耗更少,也就可以更有效的清理更多的空间。 这项设置在每个 topic 设置中可以覆盖
log.cleaner.delete.retention.ms1 day保存时间;保存压缩日志的最长时间;也是客户端消费消息的最长时间,log.retention.minutes 的区别在于一个控制 未压缩数据,一个控制压缩后的数据;会被 topic 创建时的指定时间覆盖
log.index.size.max.bytes10*1024*1024每个 log segment 的最大尺寸。如果 log 尺寸达到这个数值,即使尺寸没有超过 log.segment.bytes 限制,也需要产生新的 log segment
log.index.interval.bytes4096当执行一次 fetch 后,需要一定的空间扫描最近 的 offset,设置越大越好,一般使用默认就可以
log.flush.interval.messagesLong.MaxValuelog 文件“sync”到磁盘之前累积的消息条数。因为磁盘 IO 操作是慢操作,又是一个数据可靠性的必要手段,检查是否需要固化到硬盘的时间间隔。需要在数据可靠性与性能之间做必要的权衡,如果此值过大,将会导致每 次“发 sync”的时间过长(IO 阻塞),如果此值过小,将会导致“fsync”的时间较长(IO 阻塞), 如果此值过小,将会导致”发 sync“的次数较多, 这也就意味着整体的 client 请求有一定的延迟, 物理 server 故障,将导致没有 fsync 消息丢失
log.flush.scheduler.interval.msLong.MaxValue检查是否需要 fsync 的时间间隔
log.flush.interval.msLong.MaxValue仅通过 interval 来控制消息的磁盘写入时机是不足的,这个数用来控制”fsync“的时间间隔, 如果消息量始终没有达到固化到磁盘的消息数, 但离上次磁盘同步的时间间隔达到阈值,也将触发磁盘同步
log.delete.delay.ms60000文件在索引中清除后的保留时间,一般不需修改
auto.create.topics.enabletrue是否允许自动创建 topic。如果是真的,则 produce 或者 fetch 不存在的 topic 时,会自动创建topic。否则需要使用命令行创建 topic
controller.socket.timeout.ms30000partition 管理控制器进行备份时,socket 的超时时间
controller.message.queue.sizeInt.MaxValuecontroller-to-broker-channles 的 buffer 尺寸
default.replication.factor1默认备份份数,仅指自动创建的 topics
replica.lag.time.max.ms10000如果一个follower在这个时间内没有发送 fetch 请求,leader 将从 ISR 重移除这个 follower, 并认为这个 follower 已经挂了
replica.lag.max.messages40004000如果一个 replica 没有备份的条数超过这个数 值,则 leader 将移除这个 follower,并认为这 个 follower 已经挂了
replica.socket.timeout.ms30*1000leader 备份数据时的 socket 网络请求的超时时间
replica.socket.receive.buffer.bytes64*1024备份时向 leader 发送网络请求时的 socket receive buffer
replica.fetch.max.bytes1024*1024备份时每次 fetch 的最大值
replica.fetch.min.bytes500leader 发出备份请求时,数据到达 leader 的最长等待时间
replica.fetch.min.bytes1备份时每次 fetch 之后回应的最小尺寸
num.replica.fetchers1从 leader 备份数据的线程数
replica.high.watermark.checkpoint.interval.ms5000每个 replica 检查是否将最高水位进行固化的频率
fetch.purgatory.purge.interval.requests1000fetch 请求清除时的清除间隔
producer.purgatory.purge.interval.requests1000producer 请求清除时清除间隔
zookeeper.session.timeout.ms6000zk会话超时时间
zookeeper.connection.timeout.ms6000客户端等待和 zk 建立连接的最大时间
zookeeper.sync.time.ms2000zk follower 落后于 zk leader 的最长时间
controlled.shutdown.enabletrue是否能够控制 broker 的关闭。如果能够,broker 将可以移动所有 leaders 到其他的 broker 上, 在关闭之前。这减少了不可用性在关机过程中
controlled.shutdown.max.retries3在执行不彻底的关机之前,可以成功执行关机的命令数
controlled.shutdown.retry.backoff.ms5000在关机之间的 backoff 时间
auto.leader.rebalance.enabletrue如果这是 true,控制者将会自动平衡 brokers 对于 partitions 的 leadership
leader.imbalance.per.broker.percentage10每个 broker 所允许的 leader 最大不平衡比率
leader.imbalance.check.interval.seconds300检查 leader 不平衡的频率
offset.metadata.max.bytes4096允许客户端保存他们 offsets 的最大个数
max.connections.per.ipInt.MaxValue每个 ip 地址上每个 broker 可以被连接的最大数目
max.connections.per.ip.overrides 每个 ip 或者 hostname 默认的连接的最大覆盖
connections.max.idle.ms600000空连接的超时限制
log.roll.jitter.{ms,hours}0从 logRollTimeMillis 抽离的 jitter 最大数目
num.recovery.threads.per.data.dir1每个数据目录用来日志恢复的线程数目
unclean.leader.election.enabletrue指明了是否能够使不在 ISR 中 replicas 设置用来作为 leader
delete.topic.enablefalse能够删除 topic
offsets.topic.num.partitions50The number of partitions for the offset commit topic. Since changing this after deployment is currently unsupported, we recommend using a higher setting for production (e.g., 100-200).
offsets.topic.retention.minutes1440存在时间超过这个时间限制的 offsets 都将被标记为待删除
offsets.retention.check.interval.ms600000offset 管理器检查陈旧 offsets 的频率
offsets.topic.replication.factor3topic 的 offset 的备份份数。建议设置更高数字保证更高可用性
offset.topic.segment.bytes104857600offsets topic 的 segment 尺寸
offsets.load.buffer.size5242880与批量尺寸相关,当从 offsets segment 中读取时使用
offsets.commit.required.acks-1在 offset commit 可以接受之前,需要设置确 认的数目,一般不需要更改

Producer Configs

PropertyDefaultDescription
metadata.broker.list 服务于 bootstrapping。producer 仅用来 获取 metadata(topics,partitions, replicas)。发送实际数据的 socket 连接将 基于返回的 metadata 数据信息而建立。格 式是: host1:port1,host2:port2 这个列表可以是 brokers 的子列表或者是一 个指向 brokers 的 VIP
request.required.acks0此配置是表明当一次produce请求被认为完成时的确认值。特别是,多少个其他 brokers 必须已经提交了数据到他们的 log 并且向他 们的 leader 确认了这些信息。典型的值包 括: 0: 表示 producer 从来不等待来自 broker 的确认信息(和 0.7 一样的行为)。这个选 择提供了最小的时延但同时风险最大(因为当 server 宕机时,数据将会丢失)。 1:表示获得 leader replica 已经接收了数 据的确认信息。这个选择时延较小同时确保 了 server 确认接收成功。 -1:producer 会获得所有同步 replicas 都 收到数据的确认。同时时延最大,然而,这 种方式并没有完全消除丢失消息的风险,因 为同步 replicas 的数量可能是 1.如果你想确 保某些 replicas 接收到数据,那么你应该在 topic-level 设置中选项 min.insync.replicas 设置一下
request.timeout.ms10000broker 尽力实现 request.required.acks 需求时的等待时间,否则会发送错误到客户 端
producer.typesync此选项置顶了消息是否在后台线程中异步发送。正确的值: (1) async: 异步发送 (2) sync: 同步发送 通过将 producer 设置为异步,我们可以批 量处理请求(有利于提高吞吐率)但是这也就造成了客户端机器丢掉未发送数据的可能性
serializer.classkafka.serializer.DefaultEncoder消息的序列化类别。默认编码器输入一个字节 byte[],然后返回相同的字节 byte[]
key.serializer.class 关键字的序列化类。如果没给与这项,默认 情况是和消息一致
partitioner.classkafka.producer.DefaultPartitionerpartitioner 类,用于在 subtopics 之间划 分消息。默认 partitioner 基于 key 的 hash 表
compression.codecnone可以设置压缩数据的 codec,可选 codec 为:none、gzip、snappy
compressed.topicsnull此项参数可以设置某些特定的 topics 是否进 行压缩。如果压缩 codec 是 NoCompressCodec 之外的 codec,则对指定的 topics 数据应用 codec。如果压缩 topics 列表是空,则将特定的压缩 codec 应用于所有 topics。如果压缩的 codec 是NoCompressionCodec,压缩对所有 topics 均不可用
message.send.max.retries3此项参数将使 producer 自动重试失败的发送请求。参数将置顶重试的次数。设定非 0 值将导致重复某些网络错误:引起 一条发送并引起确认丢失
retry.backoff.ms100在每次重试之前,producer 会更新相关 topic 的 metadata,以此进行查看新的 leader 是否分配好了。因为 leader 的选择 需要一点时间,此选项指定更新 metadata 之前 producer 需要等待的时间
topic.metadata.refresh.interval.ms600*1000producer 一般会在某些失败的情况下更新 topic 的 metadata。将会规律的循环。 如果设置为负值,metadata 只有在失败 的情况下才更新。如果设置为 0,metadata 会在每次消息发送后就会更新(不建议这种选择,系统消耗太大)。重要提示: 更新是有在消息发送后才会发生,如果 producer 从不发送消息,则 metadata 从不会更新
queue.buffering.max.ms5000当应用 async 模式时,用户缓存数据的最大时间间隔。例如,设置为 100 时,将会批量处理 100ms 之内消息。将改善吞吐率, 但会增加由于缓存产生延迟
queue.buffering.max.messages10000当使用 async 模式时,在在 producer 必须被阻塞或者数据必须丢失之前,可以缓存到 队列中的未发送的最大消息条数
batch.num.messages200使用 async 模式时,可以批量处理消息的最大条数。或者消息数目已到达这个上线或是 queue.buffer.max.ms 到达,producer 才会处理
client.id“”这个 client id 是用户特定的字符串,在每次请求中包含用来追踪调用,他应该逻辑上可以确认是那个应用发出了这个请求
NameTypeDefaultImportanceDescription
bootstrap.serverslist high用于建立与 kafka 集群连接的 host/port 组。数据将会在所有 servers 上均衡加载,不管哪些 server 是指定用于 bootstrapping。这个列表仅仅影响初始化的 hosts(用于发现全部的 servers)。列表格式: host1:port1,host2:port2... 因为这些 server 仅仅是用于初始化的连接,以发现集群所有成员关系, 这个列表不需要包含所有的 servers。如果没有 server 在这个列表出现, 则发送数据会一直失败,直到列表可用
acksstring1highproducer 需要 server 接收到数据之后发出的 确认接收的信号,此项配置就是指 procuder 需要多少个这样的确认信号。此配置实际上代表 了数据备份的可用性。设置为常用选项:(1)acks=0: 设置为 0 表示 producer 不需 要等待任何确认收到的信息。副本将立即加到 socket buffer 并认为已经发送。没有任何保 障可以保证此种情况下 server 已经成功接收数 据,同时重试配置不会发生作用(因为客户端不知道是否失败)回馈的 offset 会总是设置为-1;(2)acks=1: 这意味着至少要等待 leader 已经成功将数据写入本地 log,但是并没有等待 所有 follower 是否成功写入。这种情况下,如果 follower 没有成功备份数据,而此时 leader 又挂掉,则消息会丢失。 (3)acks=all: 这意味着 leader 需要等待所 有备份都成功写入日志,这种策略会保证只要有一个备份存活就不会丢失数据。这是最强的保 证。 (4)其他的设置,例如 acks=2 也是可以的, 这将需要给定的 acks 数量,但是这种策略一般很少用
buffer.memorylong33554432highproducer 可以用来缓存数据的内存大小。如果 数据产生速度大于向 broker 发送的速度, producer 会阻塞或者抛出异常,以 “block.on.buffer.full”来表明。 这项设置将和 producer 能够使用的总内存相 关,但并不是一个硬性的限制,因为不是 producer 使用的所有内存都是用于缓存。一些额外的内存会用于压缩, 同样还有一些用于维护请求。
compression.typestringnonehighproducer 用于压缩数据的压缩类型。默认是无 压缩。正确的选项值是 none、gzip、snappy。 压缩最好用于批量处理,批量处理消息越多,压 缩性能越好
retriesint0high设置大于 0 的值将使客户端重新发送任何数据, 一旦这些数据发送失败。这些重试与客户 端接收到发送错误时的重试没有什么不同。允许重试将潜在的改变数据的顺序,如果这两个消息 记录都是发送到同一个 partition,则第一个消息失败第二个发送成功,则第二条消息会比第一 条消息出现要早
batch.sizeint16384medium当向 server 发出请求时,这个字符串会发送给 server。目的是能够追踪请求源头,以此来允 许 ip/port 许可列表之外一些应用可以发送 信息。这项应用可以设置任意字符串,因为没有 任何功能性的目的,除了记录和跟踪
linger.mslong0mediumproducer 组将会汇总任何在请求与发送之间到达的消息记录一个单独批量的请求。通常来说, 这只有在记录产生速度大于发送速度的时候才能发生。在某些条件下,客户端将希望降低请求的数量,甚至降低到中等负载一下。这项设置将通过增加小的延迟来完成--即,不是立即发送一条记录,producer 将会等待给定的延迟 时间以允许其他消息记录发送,这些消息记录可 以批量处理。这项设置设定了批量处理的更高的延迟边界:一旦获得某个 partition 的 batch.size,将会立即发送而不顾这项设置, 然而如果获得消息字节数比这项设置要小的多,需要“linger”特定的时间以获取更多的消息。 这个设置默认为 0,即没有延迟。设 定 linger.ms=5,将会减少请求数目, 同时增加 5ms 延迟
max.request.sizeint1028576medium请求的最大字节数。这也是对最大记录尺寸的有 效覆盖。注意:server 具有自己对消息记录尺 寸的覆盖,这些尺寸和这个设置不同。此项设置 将会限制 producer 每次批量发送请求的数目, 以防发出巨量的请求。
receive.buffer.byteint32768mediumTCP receive 缓存大小,当阅读数据时使用
send.buffer.bytesint131072mediumTCP send 缓存大小,当发送数据时使用
timeout.msint30000medium此配置选项控制 server 等待来自 followers 的 确认的最大时间。如果确认的请求数目在此时间内没有实现,则会返回一个错误。这个超时限制 是以 server 端度量的,没有包含请求的网络延迟
block.on.buffer.fullbooleantruelow当我们内存缓存用尽时,必须停止接收新消息记 录或者抛出错误。默认为真, 然而某些阻塞可能不值得期待,立即抛出错误更好。设置为 false 则会:producer 会 抛出异常: BufferExhaustedException, 记录已经发送同时缓存已满
metadata.fetch.timeout.mslong60000low我们所获取的一些元素据的第一个时间数据。元素据包含:topic,host,partitions。 此项配置是指当等待元素据 fetch 成功完成所需要的时间,否则跑出异常给客户端
metadata.max.age.mslong300000low以微秒为单位的时间,是在我们强制更新 metadata 的时间间隔
metric.reporterslist[]low类的列表,用于衡量指标。实现 MetricReporter 接口,将允许增加一些类,这些类在新的衡量指 标产生时就会改变。JmxReporter 总会包含用
metrics.num.samplesint2low用于维护 metrics 的样本数
metrics.sample.window.mslong30000lowmetrics 系统维护可配置的样本数量,在一个可修正的 window size。这项配置配置了窗口大小,我们可能在 30s 的期间维护两个样本
recoonect.backoff.mslong10low连接失败时,当我们重新连接时的等待时间。这避免客户端反复重连
retry.backoff.mslong100low在试图重试失败的 produce 请求之前的等待时间。避免陷入发送-失败的死循环中
PropertyDefaultServer Default PropertyDescription
cleanup.policydeletelog.cleanup.policy要么是delete,要么是compact; 指明针对旧日志部分的利用方式;默认delete将会丢弃旧部分当他们回收时间或尺寸限制到达时compact将进行日志压缩
delete.retention.ms86400000 (24hours)log.cleaner.delete.retention.ms对压缩日志保留的最长时间,也是客户端消费消息的最长时间,对于log.retention.minutes 区别在于一个控制未压缩数据,一个控制压缩后的数据。此项配置可在 topic 创建时的置顶参数覆盖
flush.messagesNonelog.flush.interval.messages配置指定时间间隔:强制进行 fsync 日志。如果这个选项设置为 1,每条消息之后都需要进行 fsync,如果设置为 5,则每 5 条消息就需要进行一次 fsync。一般建议不要设置这个值。此参数的设置,需要在"数据可靠性" 与"性能"之间做必要的权衡.如果此值过大,将会导致每次"fsync"的时间较长(IO阻塞),如果此值过小,将会导致"fsync"的次数较多,这也意味着整体的 client 请求有一定延迟.物理 server 故障,将会导致没有 fsync 的消息丢失
flush.msNonelog.flush.interval.ms此项配置用来置顶强制进行 fsync 日志到磁盘的时间间隔;如果设置为 1000,那么每 1000ms 就需要进行一次 fsync
index.interval.bytes4096log.index.interval.bytes默认设置保证了我们每 4096 个字节就对消息添加一个索引,更多索引使得阅读的消息更加靠近,但索引规模却会由此增大;一般不需要改变这个选项
max.message.bytes1000000max.message.byteskafka 追加消息的最大尺寸。注意如果增大这个尺寸,也必须增大consumer的fetch尺寸,这样consumer才能 fetch 到这些最大尺寸的 消息
min.cleanable.dirty.ratio0.5min.cleanable.dirty.ratio此项配置控制 log 压缩器试图进行清除日志的频率。默认情况下,将避免清除压缩率超过 50%的日志
min.insync.replicas1min.insync.replicas当 producer 设置 request.required.acks 为-1 时, min.insync.replicas 指定 replicas 的最小数目(必须确认每一个 repica 的写数据都是成功的),如果这个数目没有达到, producer 会产生异常
retention.bytesNonelog.retention.bytes如果使用“delete”的 retention 策略, 这项配置就是指在删除日志之前,日志所能达到的最大尺寸。默认情况下,没有尺寸限制而只有时间限制
retention.ms7 dayslog.retention.minutes如果使用“delete”的 retention 策略,这项配置就是指删除日志前日志保存的时间
segment.bytes1 GBlog.segment.byteskafka 中 log 日志是分成一块存储, 此配置是指 log 日志划分成块的大小
segment.index.bytes10MBlog.index.size.max.bytes此配置是有关 offsets 和文件位置之间映射的索引文件的大小
segment.jitter.ms0log.roll.jitter.{ms,hours}The maximum jitter to subtract from logRollTimeMillis

Consumer Configs

PropertyDefaultDescription
group.id 用来唯一标识 consumer 进程所在组的字符串,如果设置同样的 group id,表示这些 processes 都是属于同一个 consumer group
zookeeper.connect 指定ZK的连接的字符串,格式是 hostname:port,此处 host 和 port 都是 zk server 的 host 和 port,可以指定多个 hostname:port, 使用逗号作为分隔: hostname1:port1,hostname2:port2,hostname3:port3 可以在 zk 连接字符串中加入 zk 的 chroot 路径, 此路径用于存放数据,方式: hostname1:port1,hostname2:port2,hostname3: port3/chroot/path
consumer.idnull不需要设置,一般自动产生
socket.timeout.ms30*100网络请求的超时限制。真实的超时限制 是 max.fetch.wait+socket.timeout.ms
socket.receive.buffer.bytes64*1024socket 用于接收网络请求的缓存大小
fetch.message.max.bytes1024*1024每次 fetch 请求中,针对每次 fetch 消息的最大字节数。这些字节将 会督导用于每个 partition 的内存中,因此,此设置将会控制 consumer 所使用的 memory 大小。这个 fetch 请求尺寸必须至少 和 server 允许的最大消息尺寸相等,否则,producer 可能发送的消 息尺寸大于 consumer 所能消耗的尺寸
num.consumer.fetchers1用于 fetch 数据的 fetcher 线程数
auto.commit.enabletrue如果为真,consumer 所 fetch 的消息的 offset 将会自动的同步到 zk。这项提交的 offset 将在进程挂掉时,由新的 consumer 使用
auto.commit.interval.ms60*1000consumer 向 zk 提交 offset 的频率,单位秒
queued.max.message.chunks2用于缓存消息最大数目,以供 consumption。每个 chunk 必须和 fetch.message.max.bytes 相同
rebalance.max.retries4当新的 consumer 加入到 consumer group 时,consumers 集合 试图重新平衡分配到每个 consumer 的 partitions 数目。如果 consumers 集合改变了,当分配正在执行时,这个重新平衡会失败 并重入
fetch.min.bytes1每次 fetch 请求时,server 应该返回的最小字节数。如果没有足够的 数据返回,请求会等待,直到足够的数据才会返回。
fetch.wait.max.ms100如果没有足够的数据能够满足 fetch.min.bytes,则此项配置是指在 应答 fetch 请求之前,server 会阻塞的最大时间。
rebalance.backoff.ms2000在重试 reblance 之前 backoff 时间
refresh.leader.backoff.ms200在试图确定某个 partition的 leader是否失去他的 leader 地位之前, 需要等待的 backoff 时间
auto.offset.resetlargestzk中没有初始化的 offset 时,如果 offset 是以下值的回应: smallest:自动复位 offset 为 smallest 的 offset largest:自动复位 offset 为 largest 的 offset anything else:向 consumer 抛出异常
consumer.timeout.ms-1如果没有消息可用,即使等待特定的时间之后也没有,则抛出超时异 常
exclude.internal.topicstrue是否将内部 topics 的消息暴露给 consumer
paritition.assignment.strategyrange选择向 consumer 流分配 partitions 的策略,可选值:range, roundrobin
client.idgroup id value用户特定的字符串,用来在每次请求中帮助跟踪调用。它应该可以 逻辑上确认产生这个请求的应用
zookeeper.session.timeout.ms6000zk会话的超时限制。如果 consumer 在这段时间内没有向 zk 发送心跳信息,则它会被认为挂掉了,并且 reblance 将 会产生
zookeeper.connection.timeout.ms6000客户端在建立通 zk 连接中的最大等待时间
zookeeper.sync.time.ms2000ZK follower 可以落后 ZK leader 的最大时间
offsets.storagezookeeper用于存放 offsets 的地点: zk 或 kafka
offset.channel.backoff.ms1000重新连接 offsets channel 或者是重试失败的 offset 的 fetch/commit 请求的 backoff 时间
offsets.channel.socket.timeout.ms10000当读取 offset 的 fetch/commit 请求回应的 socket 超时限制。此超时限制是被 consumerMetadata 请求用来请求 offset 管理
offsets.commit.max.retries5重试 offset commit 的次数。这个重试只应用于 offset commits 在 shut-down 之间
dual.commit.enabledtrue如果使用 kafka 作为 offsets.storage,可以二次提交 offset 到 zk (还有一次是提交到 kafka)。在 zookeeper-based 的 offset storage 到 kafka-based 的 offset storage 迁移时是必须的。对任意给定的 consumer group 来说,比较安全的建议是当完成迁移之后就关闭这个选项
partition.assignment.strategyrange在“range”和“roundrobin”策略之间选择一种作为分配 partitions 给 consumer 数据流的策略; 循环的 partition 分配器分配所有可用的 partitions 以及所有可用 consumer 线程。它会将 partition 循环的分配到 consumer 线程上。如果所有 consumer 实例的订阅都确定,则 partitions 的划分是确定的分布。循环分配策略只有在以下条件满足时才可以:每个 topic 在每个 consumer 实力 上都有同样数量的数据流;订阅的 topic 的集合对于 consumer group 中每个 consumer 实例来说都是确定

标题:Kafka配置解析
作者:Hefery
地址:http://www.hefery.icu/articles/2022/02/13/1644749043415.html