首页 > 其他 > 详细

kafka基础六

时间:2019-03-24 13:50:35      阅读:181      评论:0      收藏:0      [点我收藏+]

kafka中的高可用HA

1、replication副本

同一个partition会有一个leader和多个副本,这些副本存储的内容与leader相同,可以通过 server.properties 配置中的 default.replication.factor=N进行配置。producer只和Leader进行交互,replication作为follower复制leader中的数据。
kafka中分配replication的算法

1、将n个待分配的broker和partition排序。
2、将第i个partition分配到 i mod n个broker上。
3、将第i个partition的第j个replica分配到第(i+j)mod n 个broker上。

2、Leader的故障转移(Leader failover)

当partition的leader宕机后,会在所有的follower中选举出一个新的Leader,这个新的Leader必须有旧Leader commit的所有的消息。
kafka在zookeeper中的broker/.../state下维护了一个ISR(in-sync-replica),ISR中的所有replication的数据都与leader的数据是一致的。只有ISR中的replication才能选举成为Leader。对于一个partition有n+1个replication,并且n个replication失效的情况下保证消息不丢失。

3、broker failover

技术分享图片
1、controller会在zookeeper的brokers/ids/brokerid下注册节点,如果broker宕机,zookeeper会fire watch。
2、controller从brokers/ids下读取所有可用的broker
3、controller从set_p读取宕机broker的所有的partition,set_p集合存储了宕机broker所有的partition。
4、对于读取到的每个partition,都做以下操作:
(1)从/brokers/topics/[topic]/partitions/[partition]/state 节点下读取ISR
(2)选举出该partition新的Leader
(3)将新 leader、ISR、controller_epoch 和 leader_epoch 等信息写入 state 节点
5、通过RPC向相关的broker发出leaderAndISRRequest 命令。

4、controller failover

每个broker都会在/controller节点下注册watch,当controller宕机,zookeeper中controller临时节点就会消失,所有存活的broker收到fire的通知后都会尝试创建controller path,但是只会有一个竞选成功。

当新的的controller竞选成功后会触发KafkaController.onControllerFailover 方法,该方法会有以下操作:

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

引用:https://blog.csdn.net/Kim_Weir/article/details/79934095

kafka基础六

原文:https://www.cnblogs.com/ozho/p/10587867.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!