Zookeeper 存储的 Kafka 信息
在zookeeper的服务端存储的Kafka相关信息
1)/kafka/brokers/ids [0,1,2] 记录有哪些服务器
2)/kafka/brokers/topics/first/partitions/0/state 记录谁是leader,有哪些服务器可用
3)/kafka/controller 辅助选举leader
Kafka Broker 总体工作流程
1)broker启动后在zk中注册
2)controller谁先注册,谁说了算
3)由选举出来的Controller监听brokes节点变化
4)Controller决定Leader选举
5)controller将节点信息上传到ZK
6) 其他controller从zk同步相关信息
7)假设broker中leader挂了
8)controller监听到节点变化
9)获取ISR
10) 选举新的leader(选举规则:在ISR中存活为前提,按照AR中排在前面的优先)
11)更新leader及ISR
4.1.3 Broker重要参数
参数名称 | 描述 |
---|---|
replica.lag.time.max.ms | ISR中,如果Follower长时间未向Leader发送通信或同步信息,则该Follower将剔除ISR。该事件阈值,默认30s。 |
auto.leader.rebalance.enable | 默认是true,自动Leader Partitioner平衡 |
leader.imbalance.per.broker.percentage | 默认是10%,每个broker允许的不平衡的leader的比率,如果每个broler超过了这个值,控制器会触发leader平衡 |
leader.imbalance.check.interval.seconds | 默认是300秒,检查leader负载是否平衡的间隔时间 |
log.segment.bytes | Kafka中log日志是分成一块块存储的,此配置之是指log日志划分成块的大小,默认值1G |
log.index.interval.bytes | 默认4KB,kafka里面每当写入了4KB大小的日志(.log),然后就往index文件里面记录一个索引 |
log.retention.hours | kafka中数据保存时间,默认七天 |
log.retention.minutes | kafka中数据保存时间,分钟级别,默认关闭 |
log.retention.ms | kafka中数据保存的时间,毫秒级别,默认关闭 |
log.retention.check.interval.ms | 检查数据是否保存超时的间隔,默认是5分钟 |
log.retention.bytes | 超过设置的索引日志总大小,删除最早的segment |
log.cleanup.policy | 默认delete,表示所有数据启用删除策略,如果设置值为compact,表示所有数据启用压缩策略 |
num.io.threads | 默认是8,负载写磁盘的线程数,真个参数值要占总核数的50% |
num.replica.fetchers | 副本数拉取线程数,这个参数占总核数的50% |
num.network.threads | 默认是3,数据传输线程数,这个参数总核数的50%的2/3 |
log.flush.interval.messages | 强制页缓存写道磁盘条数,默认是long的最大值,9223372036854775807,一般不建议修改,交给系统自己管理 |
log.flush.interval.ms | 每隔多久,刷数据到磁盘,默认是null,一般不建议修改,交给系统自己管理 |