kafka03-副本-选举-故障鼓励-持久化-稀疏索引

Kafka工作流程:

Kafka副本:
Kafka默认是一个副本,生产环境中,一般会设置两个副本
副本的作用就是为了保证数据的可靠性,但副本也不能太多,否则占用太多资源影响性能
副本分为leader和follower,所有的数据读取操作都是对leader操作,follower只同步备份
Kafka分区中的所有副本统称为AR(Assigned Repllicas)
AR = ISR + OSR
ISR 存储的是leader和所有活跃的follower,如果follower超过30秒 没有与leader正常通信,就会被剔除到 OSR
OSR 存储的是 follower 与 leader 同步时,延迟过多的副本
leader 选举:
kafka每启动一个broker节点,就会向zk注册一个节点信息
每个broker都有一个对应的controller,那个broker的controller先注册到zk的controller节点,谁就是之后的controller-leader
leader-controller 会监控zk上的brokers-ids节点的变化,如果该节点有任何变化,就能够快速捕捉到
选副本leader,以ISR为条件,也就是必须是活着的,然后按照副本在AR中排列的顺序,选择leader
选出副本leader后,leader-controller就会把leader和isr信息存储在zk上,如果之后leader挂掉的话,方便leader-controller快速拉取信息重新选择leader
follower故障处理:
LEO(log end offset)每个副本的最后一个offset,LEO其实就是最新的offset+1
HW(high watermake)所有副本中最小的LEO

leader 故障处理:

手动调整分区副本存储: 通过创建脚本,执行计划,验证计划来处理

Leader Partition 自动平衡:一般不会启动,因为再平衡时会阻塞producer和consumer,消耗性能

Kafka文件存储机制(持久化): 一个segment为1G

稀疏索引:
kafka index为稀疏索引,大约每往log文件写入4kb数据,会往index文件写入一条索引。
参数 log.index.interval.bytes 默认 4kb
index 文件中保存的offset为相对offset,这样能确保offset的值所占空间不会过大,因此能将offset的值控制在固定大小
index定位数据原理:

Kafka文件过期清楚策略(持久化过期):
log.retention.hours,最低优先级,小时,默认68(7天)
log.retention.minutes,分钟
log.retention.ms,毫秒(优先级最高)
log.retention.check.interval.ms 监察周期,默认5分钟(注意,如果设置retention为毫秒或分钟及,要对应的修改check周期时间)
对过期的数据有两种方式处理:
log.cleanup.policy = delete 直接删除策略
基于时间(默认使用):以segment中时间戳最大的为条件(可能存在部分数据过期,但只以最大值计算),操作7天删除,否则一直保留
基于大小(默认关闭):所有设置的所有日志总大小,删除最早的segment。log.retention.bytes=-1,默认表示无穷大
log.cleanup.policy = compact 压缩,key去重,只保留最新value


浙公网安备 33010602011771号