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

Zookeeper中存储的kafka信息:

 

 

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 选举:

  1. kafka每启动一个broker节点,就会向zk注册一个节点信息

  2. 每个broker都有一个对应的controller,那个broker的controller先注册到zk的controller节点,谁就是之后的controller-leader

  3. leader-controller 会监控zk上的brokers-ids节点的变化,如果该节点有任何变化,就能够快速捕捉到

  4. 选副本leader,以ISR为条件,也就是必须是活着的,然后按照副本在AR中排列的顺序,选择leader

  5. 选出副本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周期时间)


对过期的数据有两种方式处理:

  1. log.cleanup.policy = delete 直接删除策略

    1. 基于时间(默认使用):以segment中时间戳最大的为条件(可能存在部分数据过期,但只以最大值计算),操作7天删除,否则一直保留

    2. 基于大小(默认关闭):所有设置的所有日志总大小,删除最早的segment。log.retention.bytes=-1,默认表示无穷大

  2. log.cleanup.policy = compact 压缩,key去重,只保留最新value

     

     

     

posted @ 2022-03-08 18:01  迷路小孩  阅读(243)  评论(0)    收藏  举报