20-kafka生产环境搭建之核心参数详解
- borker.id
- log.dirs:日志存储目录(可以多个目录,使用逗号分隔,可以多磁盘提高效率)
- zookeeper.connect:
- listeners:默认9092,没必要改
- delete.topic.enable:允许删除topic默认true
- num.network.threads:processor线程数 默认3,建议调到6-9
- num.io.threads:handlerrequestPool线程数,默认8,建议32
- log.retention.hours:kafka数据生命周期,默认7天(可以少点,如3天之内)
- log.flush.interval.ms:os cache 刷新到磁盘的时间间隔,默认1s,(太频繁了)
- log.flush.interval.messages:os cache 刷新到磁盘的条数,默认1万
- message.max.bytes :broker能接收的最大消息大小,默认977k,太小了,建议改成10M或更大
- min.insync.replicas:默认是1,producer向leader发送数据的时候,通过
request.required.acks
设置数据可靠性的级别
1(默认):producer 在 ISR 中的 leader 成功接收到数据并得到确认后,发送下一条message.
0:producer 不等待任何确认消息,直接发送下面的message。效率高,可靠性低
-1:producer 等待 ISR 中的所有 follower 都确认接收到数据后才发送下一条。可靠性最高,但也不能保证不丢数据。比如ISR只有leader时(follower超过10秒没有向leader同步数据,就会从ISR中移除)。
21-kafka生产环境搭建之集群压力测试
kafka-producer-perf-test.sh --broker-list kafka:9092 --messages 5000000 --topics test
kafka-consumer-perf-test.sh --broker-list kafka:9092 --fetch-size 2000 --message 5000000 --topics test
22-kafka运维之常见运维工具介绍
kafkaManager(略了)
23-kafka运维之常见运维命令介绍
- Topic 数据增大,需要增加partiton
kafka-topic.sh --alter --zookeeper zk:2181 --partition 3 --topic test
- 核心 Topic 增加副本因子
先编辑 test.json文件
{"version":1,
"partitions":[
{"topic":"test","partition":0,"replicas":[0,1,2]},
{"topic":"test","partition":1,"replicas":[0,1,2]},
{"topic":"test","partition":2 ,"replicas":[0,1,2]}
]}
执行以下命令(记得指定 test.json 文件)
kafka-reassign-partitions.sh --zookeeper zk:2181 --reassignment-json-file test.json --execute
- Topic 负载不均衡
编辑 topics-to-move.json
{"topic":[
{"topic":"test01"},
{"topic":"test02"}
],
"version":1
}
生成迁移方案命令:要指定topics-to-move.json。此命令会生成expand-cluster-reassignment.json 文件
kafka-reassign-partitions.sh --zookeeper zk:2181 --topics-to-move-json-file test.json --broker-list "5,6" --generate
执行迁移方案
kafka-reassign-partitions.sh --zookeeper zk:2181 --reassignment-json-file expand-cluster-reassignment.json --execute
检查迁移是否完成
kafka-reassign-partitions.sh --zookeeper zk:2181 --reassignment-json-file expand-cluster-reassignment.json --verify
注意:迁移需要在低峰期进行,因为会占用大量带宽
- broker leader partition 过多,需要负载均衡
kafka 与leader负载均衡相关的参数有三个
- auto.leader.rebalance.enable:是否开启leader负载均衡,默认true.
- leader.imbalance.check.interval.seconds:检查负载时间间隔,默认300s.
- leader.imbalance.per.broker.percentage:每个broker允许的不平衡比例,默认10%
解释不平衡比例:如有三个broker,leader数分布如下
broker0:4
broker1:3
broker2:1
正常负载应该是
broker0:2
broker1:2
broker2:2
每个broker平衡比例计算规则在 KafkaController.scala
里,具体的没细看呢。
网友评论