Kafka 2.7 集群参数介绍
Kafka配置集群时涉及到诸多参数,了解这些参数是使用好Kafka的前提,本文做个备忘以便后续查阅。
Kafka Server配置参数
listeners
格式:协议名称://主机名:端口号
告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
advertised.listeners
格式:协议名称://主机名:端口号
区别于listeners,表明这个broker是用于对外发布的。
auto.create.topics.enable
默认值:true
是否允许自动创建topic,即当生产者或消费者指定的Topic不存在时,是否允许自动创建。为了命名规范,应考虑将其设置为false。
unclean.leader.election.enable
默认值:false
是否允许不在ISR集合中的副本参与leader选举,为了防止数据丢失,应设为false。据说这个默认值在有些版本的Kafka中不一样,需要额外关注下。
auto.leader.rebalance.enable
默认值:true
这个配置与broker的负载均衡有关。若broker故障无法对外提供服务,则该broker上的分区将转移到其他可用的broker上,该分区的leader副本也随之转移。当一台broker的leader副本过多,将导致其压力过大,因此Kafka默认当其leader副本超过指定的比例leader.imbalance.per.broker.percentage
且auto.leader.rebalance.enable
为true时,将触发换leader的操作。因为换leader成本较高,推荐将其设置为false。
log.retention.hoursminutes|ms
默认值:168小时即一周
指定数据留存时间。从优先级上来说 ms 设置最高、minutes 次之、hours 最低。
log.retention.bytes
默认值:1073741824即1GB
指定Broker为消息保存的总磁盘容量大小。
num.partitions
默认值:1
新建topic默认的分区数量。
default.replication.factor
默认值:1
默认创建topic的副本数,建议修改为>=3的数来避免数据丢失。
offsets.topic.replication.factor
默认值:1
与位移主题相关的副本因子,为了提高数据持久性建议设置>1的值。
min.insync.replicas
默认值:1
表示消息至少要被写入到多少个副本才算是“已提交”,调大该值可以提升消息持久性,建议设置1<min.insync.replicas<default.replication.factor
的值。
zookeeper.connect
zookeeper连接字符串。格式形如:zk1:2181,zk2:2181,zk3:2181
或zk1:2181,zk2:2181,zk3:2181/kafka1
(kafka1为chroot
字符串,用于标识kafka集群)
num.network.threads
默认值:3
服务器用于处理网络请求的网络线程数。该参数为动态参数,可用于临时提高消息的处理能力。
num.io.threads
默认值:8
服务器用于执行网络请求的io线程数。该参数为动态参数,可用于临时提高消息的处理能力。
num.replica.fetchers
默认值:1
follower拉取leader副本消息的线程数
Topic参数
Topic参数会覆盖Kafka默认参数,用于根据实际业务进行调整。
创建topic时添加设置
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic transaction --partitions 1 --replication-factor 1 --config retention.ms=15552000000 --config max.message.bytes=5242880
修改topic
bin/kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name transaction --alter --add-config max.message.bytes=10485760
retention.ms
默认值:604800000ms即7天
topic消息保存时长。
retention.bytes
默认值:1073741824byte即1GB
topic消息总磁盘空间。
compression.type
默认值:producer
topic级别的压缩类型,允许的压缩算法为gzip
、snappy
、lz4
、zstd
,此外也允许不压缩uncompressed
或保留生产者的压缩格式producer
。
JVM 参数(Java8)
推荐使用Java8及以上的JDK;内存推荐至少设置为6g;建议使用G1垃圾回收器,因为其性能更好,能使full gc较少。
export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
bin/kafka-server-start.sh config/server.properties
推荐阅读