首页  

kafka高可用机制简介     所属分类 kafka 浏览量 1366
partition  副本 replica
default.replication.factor=N
replication-factor 3   (总共3份数据)

 elasticsearch aerospike kafka副本数设置 


leader failover

leader follower
ISR(in-sync replicas)
 
当所有 replica 都不可用时,两种方案

等待 ISR 中的任一个 replica 活过来,并选它作为 leader。可保障数据不丢失,但时间可能相对较长。
选择第一个活过来的 replica(不一定是 ISR 成员)作为 leader。无法保障数据不丢失,但相对不可用时间较短。

broker failover

1 controller 在 zookeeper 的 /brokers/ids/[brokerId] 节点注册 Watcher,当 broker 宕机时 zookeeper 会 fire watch
2 controller 从 /brokers/ids 节点读取可用broker
3 controller决定set_p,该集合包含宕机 broker 上的所有 partition
4 对 set_p 中的每一个 partition 
    4.1 从/brokers/topics/[topic]/partitions/[partition]/state 节点读取 ISR 
    4.2 决定新 leader 
    4.3 将新 leader、ISR、controller_epoch 和 leader_epoch 等信息写入 state 节点

通过 RPC 向相关 broker 发送 leaderAndISRRequest 命令



controller failover


当 controller 宕机时会触发 controller failover。
每个 broker 都会在 zookeeper 的  /controller节点注册 watcher,
当 controller 宕机时 zookeeper 中的临时节点消失,所有存活的 broker 收到 fire 的通知,
每个 broker 都尝试创建新的 controller path,只有一个竞选成功并当选为 controller。

当新的 controller 当选时,会触发 KafkaController.onControllerFailover

读取并增加 Controller Epoch。
在 reassignedPartitions Patch(/admin/reassign_partitions) 上注册 watcher。
在 preferredReplicaElection Path(/admin/preferred_replica_election) 上注册 watcher。
通过 partitionStateMachine 在 broker Topics Patch(/brokers/topics) 上注册 watcher。
若 delete.topic.enable=true(默认值是 false),则 partitionStateMachine 在 Delete Topic Patch(/admin/delete_topics) 上注册 watcher。
通过 replicaStateMachine在 Broker Ids Patch(/brokers/ids)上注册Watch。
初始化 ControllerContext 对象,设置当前所有 topic,“活”着的 broker 列表,所有 partition 的 leader 及 ISR等。
启动 replicaStateMachine 和 partitionStateMachine。
将 brokerState 状态设置为 RunningAsController。
将每个 partition 的 Leadership 信息发送给所有“活”着的 broker。
若 auto.leader.rebalance.enable=true(默认值是true),则启动 partition-rebalance 线程。
若 delete.topic.enable=true 且Delete Topic Patch(/admin/delete_topics)中有值,则删除相应的Topic

上一篇     下一篇
链式调用优缺点

CountDownLatch 与 CyclicBarrier

让自己更优秀的16条法则

kafka消息投递语义

redis使用注意点

集群session处理