kafka(四)
1.副本机制
副本本身只是一个分区的指代,即副本对象Replica都最终指向一个Partition。
在一个分区的Leader副本中会维护自身以及所有follower副本的状态,follower副本只维护自己的状态,在leader中partition的副本分两种localReplica和RemoteReplica。
RemoteReplica指向一个follower上的LocalReplica。
核心字段:
brokerId,partition:此副本对应的分区,log:本地副本的log对象。
2.分区
核心字段:
topic和partitionId:此Partition对象代表的topic名称和分区编号。
localBrokerId:当前brokerId
logManager:当前broker的logmanager
leaderEpoch:leader副本的年代信息
leaderReplicaIdOpt:该分区的leader副本的id
inSyncReplicas:该分区的isr集合
assignedReplicaMap:该分区的全部分区集合
核心方法:
获取Replica:getOrCreateReplica方法
副本角色切换:makeLeader和makeFollower
isr集合:maybeExpandIsr
调用日志存储:appendMessageToLeader
检测HW的位置:checkEnoughReplicasReachOffset
3.ReplicationManager
主要负责分区的管理,分区内周期性任务的调度。
4.KafkaController
主要负责协调各个broker之间的关系,broker的leader和follower状态都是controller在维护。主要功能
选举leader,并维护当前broker的状态
上下文信息,缓存了整个zookeeper的中整个集群的元信息
维护与集群中其他broker的连接
topic的管理
分区和副本的状态管理
zookeeper的监听器
故障转移
分区的负载均衡