2018网站开发最流行的语言WordPress里面自定义功能
在这里插入图片描述
我们已经了解到,复习一下
-  
创建topic时,可以指定
副本因子repilication-factor = 3- 表示分区的副本数,包括Leader分区副本和follower分区副本
 - 不要超过broker的数量,尽量保证一个分区的副本均匀分散不同的broker上
 - 第一个副本通过
轮询的方式分配broker,从broker列表中随机位置开始轮询(生成一个随机数,选定第一个broker,然后开始逐个轮询broker放副本) - 实现高可用
 
 -  
Leader 副本只有一个,负责读写,其他节点都是Follower副本,
 -  
Producer 只把消息发送到Leader分区,Follower副本负责从Leader同步数据
 -  
ISR 同步副本列表 (包含Leader)
- 怎么样算同步呢
 replica.lag.max.messages默认4000条,Follower消息已经滞后Leader4000条,即踢出ISR,新版本已经取消该规则replica.lag.max.ms默认10000ms, 10s内Follower 还没有向Leader发送fetch请求,即踢出ISR- 新版本只通过该规则识别有效副本
 - 当Follower副本将Leader副本LEO之前的所有消息都同步时,认为该副本已经追赶上Leader副本
 - 更新该副本的
lastCaughtUpTimeMs最后拉取数据的时间戳 - ReplicaManager 副本管理器 会启动一个定时任务
 - 定时任务定时监测 
当前时间与lastCaughtUpTimeMs的差值 是否大于replica.lag.max.ms值 - 大于即说明当前副本失效,踢出ISR
 
- 每条消息都带时间戳,生产者不带的话broker也会给消息生成时间戳,当查找消息时就是根据偏移了+时间戳
 
 -  
为了保证可靠性,可以设置确认机制
ack= all,- Producer将消息发送给Leader
 - Leader会等到ISR中所有Follower同步数据发送ack
 - Leader 再commit,Leader再向Producer发送ack
 - 保证生产者发送的消息实际写入所有副本
 
 
什么情况会导致副本失效呢?
- Follower副本进程卡住,一段时间内没有向Leader副本发起请求,比如Follower副本所在的broker内存满了,频繁发起Full GC,我们知道Full GC时会STW(stop the world ),啥也干不了了
 - Follower 副本进程同步过慢,网络或者IO开销过大或机器性能问题,导致Follower在一段时间内无法赶上Leader
 - 改变副本因子,比如增加一个副本,新增副本在同步Leader数据时,也会一直处于失效状态
 - Follower节点由于宕机下线了,后又上线,在追赶上Leader副本之前也处于失效状态
 
