failover 又称故障切换,指系统中其中一项设备或服务失效而无法运作时,另一项设备或服务即可自动接手原失效系统所执行的工作。
分布式架构一致性方案:
Master-slave:
Ø 同步复制可保证强一致性但会影响可用性
Ø 异步复制可提供高可用性但会降低一致性
WNR
Ø 主要用于去中心化(P2P)的分布式系统中。DynamoDB与Cassandra即采用此方案
Ø N代表副本数,W代表每次写操作要保证的最少写成功的副本数,R代表每次读至少读取的副本数
Ø 当W+R>N时,可保证每次读取的数据至少有一个副本具有最新的更新
Ø 多个写操作的顺序难以保证,可能导致多副本间的写操作顺序不一致,Dynamo通过向量时钟保证最终一致性
Paxos及其变种
Ø Google的Chubby,Zookeeper的Zab,RAFT等
Replica
Ø 当某个Topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)
Ø Replica的个数小于等于Broker数,即对每个Partition而言每个Broker上只会有一个Replica,因此可用Broker ID表示Replica
Ø 所有Partition的所有Replica默认情况会均匀分布到所有Broker上
Data Replication
1.Propagate消息
Commit
Leader告诉 client 消息写完了,就是commit,kafka保证的是一条数据只要commit了,就不会出现数据丢失
ISR
Ø Leader会维护一个与其基本保持同步的Replica列表,该列表称为ISR(in-sync Replica)
Ø 如果一个Follower比Leader落后太多,或者超过一定时间未发起数据复制请求,则Leader将其从ISR中移除
Ø 当ISR中所有Replica都向Leader发送ACK时,Leader即Commit
kafka不是完全同步,也不是完全异步..当一台服务器被踢出ISR列表后,又清理了一下内存,速度变快了,它会请求Leader的数据,直到数据量没有比Leader落后太多,就会被重新加入到ISR列表中
Commit策略
Ø Server配置
o replica.lag.time.max.ms=10000
如果ISR列表中的服务器超过十秒没有pull数据,那么就会被ISR列表移除
o replica.lag.max.messages=4000
如果Leader跟Follow数据差距超过4000,那么就会被移除列表
Ø Topic配置
o min.insync.replicas=1
Topic设置一个replicas,如果当服务器挂掉后,,数据就会丢失,最好多复制几个
Ø Producer配置
o request.required.acks=0
当value = 0时,producer是不需要管Leader响应的直接commit数据,直接当成发送成功,当value = 1, leader发送ack,就会当成发送成功,value = -1,用户不需要考虑决策,当iso列表中的所有follow全部发送ack,才会当成发送成功
Replica数据恢复
Replica全部宕机策略
n 等待ISR中任一Replica恢复,并选它为Leader
Ø 等待时间较长,降低可用性
n 选择第一个恢复的Replica为新的Leader,无论它是否在ISR中
Ø 并未包含所有已被之前Leader Commit过的消息,因此会造成数据丢失,可用性较高