kafka在所有broker中选出一个controller,所有Partition的Leader选举都由controller决定。controller会将Leader的改变直接通过RPC的方式(比Zookeeper Queue的方式更高效)通知需为此作出响应的Broker。同时controller也负责增删Topic以及Replica的重新分配。 当有broker fari over controller的处理过程如下: 1.Controller在Zookeeper注册Watch,一旦有Broker宕机(这是用宕机代表任何让系统认为其die的情景,包括但不限于机器断电,网络不可用,GC导致的Stop The World,进程crash等),其在Zookeeper对应的znode会自动被删除,Zookeeper会fire Controller注册的watch,Controller读取最新的幸存的Broker
2.Controller决定set_p,该集合包含了宕机的所有Broker上的所有Partition
3.对set_p中的每一个Partition
3.1 从/brokers/topics/[topic]/partitions/[partition]/state读取该Partition当前的ISR
3.2 决定该Partition的新Leader。如果当前ISR中有至少一个Replica还幸存,则选择其中一个作为新Leader,新的ISR则包含当前ISR中所有幸存的Replica(选举算法的实现类似于微软的PacificA)。否则选择该Partition中任意一个幸存的Replica作为新的Leader以及ISR(该场景下可能会有潜在的数据丢失)。如果该Partition的所有Replica都宕机了,则将新的Leader设置为-1。
3.3 将新的Leader,ISR和新的leader_epoch及controller_epoch写入/brokers/topics/[topic]/partitions/[partition]/state。注意,该操作只有其version在3.1至3.3的过程中无变化时才会执行,否则跳转到3.1
1.若请求中controllerEpoch小于当前最新的controllerEpoch,则直接返回ErrorMapping.StaleControllerEpochCode。2.对于请求中partitionStateInfos中的每一个元素,即((topic, partitionId), partitionStateInfo):
2.1 若partitionStateInfo中的leader epoch大于当前ReplicManager中存储的(topic, partitionId)对应的partition的leader epoch,则:
2.1.1 若当前brokerid(或者说replica id)在partitionStateInfo中,则将该partition及partitionStateInfo存入一个名为partitionState的HashMap中
2.1.2否则说明该Broker不在该Partition分配的Replica list中,将该信息记录于log中2.2否则将相应的Error code(ErrorMapping.StaleLeaderEpochCode)存入Response中
3.筛选出partitionState中Leader与当前Broker ID相等的所有记录存入partitionsTobeLeader中,其它记录存入partitionsToBeFollower中。
4.若partitionsTobeLeader不为空,则对其执行makeLeaders方。
5.若partitionsToBeFollower不为空,则对其执行makeFollowers方法
6.若highwatermak线程还未启动,则将其启动,并将hwThreadInitialized设为true。
7.关闭所有Idle状态的Fetcher。
LeaderAndIsrRequest处理过程如下图所示
对于收到的LeaderAndIsrRequest,Broker主要通过ReplicaManager的becomeLeaderOrFollower处理,流程如下:
本文向大家介绍iOS 缓存存储方式有哪些策略?相关面试题,主要包含被问及iOS 缓存存储方式有哪些策略?时的应答技巧和注意事项,需要的朋友参考一下 你可以设置缓存的数据需要保存多长时间,ASIHTTPRequest提供了两种策略: a,ASICacheForSessionDurationCacheStoragePolicy,默认策略,基于session的缓存数据存储。当下次运行或[ASIHTTPR
本文向大家介绍Redis 淘汰策略有哪些?相关面试题,主要包含被问及Redis 淘汰策略有哪些?时的应答技巧和注意事项,需要的朋友参考一下 volatile-lru:从已设置过期时间的数据集(server. db[i]. expires)中挑选最近最少使用的数据淘汰。 volatile-ttl:从已设置过期时间的数据集(server. db[i]. expires)中挑选将要过期的数据淘汰。 vo
本文向大家介绍举例说明实现圆角的方式有哪些?相关面试题,主要包含被问及举例说明实现圆角的方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 只用过border-radius: xxx; : top-left,bottom-right; top-right, bottom-left : top-left; top-right, bottom-right; bottom-left : top-le
本文向大家介绍举例说明数组的排序方法有哪些?相关面试题,主要包含被问及举例说明数组的排序方法有哪些?时的应答技巧和注意事项,需要的朋友参考一下 直接颠倒数组中的元素 自定义排序,基础是按照字符编码(Unicode->UTF-16)进行排序(数组在原数组上进行排序,不生成副本) 循环 冒泡排序 快速排序
本文向大家介绍Kafka的主要API有哪些?相关面试题,主要包含被问及Kafka的主要API有哪些?时的应答技巧和注意事项,需要的朋友参考一下 答:Apache Kafka有4个主要API: 生产者API 消费者API 流 API 连接器API
本文向大家介绍举例说明js创建数组有哪些方法?相关面试题,主要包含被问及举例说明js创建数组有哪些方法?时的应答技巧和注意事项,需要的朋友参考一下 来点歪门邪道, 那我也来点,