kafka相关配置参数详解

2023-01-28  本文已影响0人  呦丶耍脾气

Kafka 相关配置参数

生产者配置参数:

注意这里是所有的isr内副本,min.insync.replicas只是一个最低限制,即同步副本少于该配置值,则会抛异常,如果ISR中的副本数小于min.insync.replicas,消息只能读,不能写入。

消费者配置参数:

Broker配置参数:

replication.factor 的作用是设置每个分区的副本数replication.factor是主题级别配置;default.replication.factor`是 broker 级别配置。
副本数越多,数据可靠性越高;但由于副本数增多,也会增加同步副本的开销,可能会降低集群的可用性。一般,建议设为 3,这也是 Kafka 的默认值。

不完全的选主
unclean.leader.election.enable用于控制是否支持不同步的副本参与选举 Leader。
unclean.leader.election.enable 是 broker 级别(实际上是集群范围内)配置,默认值为 true 。

从Kafka 0.11.0.0版本开始unclean.leader.election.enable参数的默认值由原来的true改为false

最少同步副本

min.insync.replicas 控制的是消息至少要被写入到多少个副本才算是已提交min.insync.replicas` 是主题级别和 broker 级别配置。
尽管可以为一个主题配置 3 个副本,但还是可能会出现只有一个同步副本的情况。如果这个同步副本变为不可用,则必须在可用性和数据一致性之间做出选择。Kafka 中,消息只有被写入到所有的同步副本之后才被认为是已提交的。但如果只有一个同步副本,那么在这个副本不可用时,则数据就会丢失。
如果要确保已经提交的数据被已写入不止一个副本,就需要把最小同步副本的设置为大一点的值。

注意:要确保 replication.factor min.insync.replicas。如果两者相等,那么只要有一个副本挂机,整个分区就无法正常工作了。我们不仅要改善消息的持久性,防止数据丢失,还要在不降低可用性的基础上完成。推荐设置成 replication.factor = min.insync.replicas + 1

auto.create.topics.enable 默认值为true,生产者向一个尚未创建的topic发送消息时,会自动创建一个num.partitions(默认值为1)个分区和default.replication.factor(默认值为1)个副本的对应topic。不过我们一般不建议将auto.create.topics.enable参数设置为true,因为这个参数会影响topic的管理与维护

log.retention.check.interval.ms 周期性检测,删除不符合保留条件的日志分段文件的间隔时间,默认值为300,000,即5分钟。
log.retention.bytes 默认值是-1,表示无穷大,参数配置的是日志文件的总大小,而不是单个的日志分段的大小,一个日志文件可以包含多个日志分段。
broker.id broker的id

broker.id.generation.enable和reserved.broker.max.id来配合生成新的broker.id。

broker.id.generation.enable
参数是用来配置是否开启自动生成broker.id的功能,默认情况下为true,即开启此功能。自动生成的broker.id是有一个基准值的,即自动生成的broker.id必须超过这个基准值,这个基准值通过
reserved.broker.max.id参数配置,默认值为1000,也就是说默认情况下自动生成的broker.id从1001开始。
replica.lag.time.max.ms 默认值(10000),即10s,当ISR中的一个follower副本滞后leader副本的时间超过参数值时即判定为副本失效,需要将此follower副本剔出除ISR之外。
auto.leader.rebalance.enable 默认true,开启分区自动平衡
如果某个Partition的Leader挂掉,该Partition副本所在的Broker会成为这Partition的Leader,这样会造成Leade分布不均衡,Leader多的Broker读写压力都会比较大。如果开启了auto.leader.rebalance.enable,则当原来挂掉的Broker恢复正常以后,可以夺回Leader。

举例:
当 partition 1 的 leader,就是 broker.id = 1 的节点挂掉后,那么 leader 0 或 leader 2 成为 partition 1 的 leader,那么 leader 0 或 leader 2 会管理两个 partition 的读写,性能会下 降,当 leader 1 重新启动后,如果开启了 leader 均衡机制,那么 leader 1 会重新成为 partition 1 的 leader,降低 leader 0 或 leader 2 的负载。
leader.imbalance.per.broker.percentage默认是10%,执行优先副本选举比例阈值,超过就执行优先副本选举

所有Broker中leader的不平衡比例,若是超过这个数值,会对分区进行重新的平衡。Broker的分区不平衡比例=非优先副本的leader个数/分区总数。只有当auto.leader.rebalance.enable设置为true时才有效。建议将auto.leader.rebalance.enable设置为false,避免集群自动执行优先副本选举,因为这样不可控。最好是手动使用path-to-json-file的方式小批量执行优先副本选举。
leader.imbalance.check.interval.seconds默认300,即5分钟,参数是自动执行优先副本的选举动作周期时长
compression.type默认值为producer,Broker对消息的压缩格式,支持gzip、snappy、 lz4、zstd和uncompressed。也可以配置成producer,表示以Producer端设置的压缩方式为准。
delete.topic.enable(默认值为true) 是否支持使用管理工具删除Topic,默认为true,支持删除。
num.partitions(默认值为1) 分区数量,如果topic在创建时没有指定partition数量,默认使用此值。Partition的数量选取也会直接影响到Kafka集群的吞吐性能,配置过小会影响消费性能,建议改为5。
每个follow从leader拉取消息进行同步数据,follow同步性能由这几个参数决定
num.replica.fetchers,拉取线程数,配置多可以提高follower的I/O并发度,单位时间内leader持有更多请求,相应负载会增大,需要根据机器硬件资源做权衡,建议适当调大;
replica.fetch.min.bytes,最小字节数,一般无需更改,默认值即可;
replica.fetch.max.bytes,最大字节数,默认为1MB,这个值太小,推荐5M,根据业务情况调整
replica.fetch.wait.max.ms,最大等待时间,follow拉取频率,频率过高,leader会积压大量无效请求情况,无法进行数据同步,导致cpu飙升。配置时谨慎使用,建议默认值,无需配置。

上一篇 下一篇

猜你喜欢

热点阅读