前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KafkaController分析7-启动流程

KafkaController分析7-启动流程

作者头像
扫帚的影子
发布2018-09-05 17:13:18
5810
发布2018-09-05 17:13:18
举报
前面我们已经分析了KafkaController中使用的一系列组件, 从本章开始,我们开始介绍KafkaController的各个功能:
KafkaController分析1-选主和Failover
KafkaController分析2-NetworkClient分析
KafkaController分析3-ControllerChannelManager
KafkaController分析4-Partition选主
KafkaController分析5-Partition状态机
KafkaController分析6-Replica状态机
KafkaController启动流程
  • 注册zk的SessionExpiration事件通知:registerSessionExpirationListener, 当session到期且新session建立后,进行controller的重新选主;
代码语言:javascript
复制
def handleNewSession() {
      info("ZK expired; shut down all controller components and try to re-elect")
      inLock(controllerContext.controllerLock) {
        onControllerResignation()
        controllerElector.elect
      }
    }
  • 启动 ZookeeperLeaderElector:controllerElector.startup. 如果当前broker成功选为Controller, 则onControllerFailover回调被触发.
代码语言:javascript
复制
      readControllerEpochFromZookeeper()
      incrementControllerEpoch(zkUtils.zkClient)
      registerReassignedPartitionsListener()
      registerIsrChangeNotificationListener()
      registerPreferredReplicaElectionListener()
      partitionStateMachine.registerListeners()
      replicaStateMachine.registerListeners()
      initializeControllerContext()
      replicaStateMachine.startup()
      partitionStateMachine.startup()
      brokerState.newState(RunningAsController)
      maybeTriggerPartitionReassignment()
      maybeTriggerPreferredReplicaElection()
      sendUpdateMetadataRequest(controllerContext.liveOrShuttingDownBrokerIds.toSeq)
      if (config.autoLeaderRebalanceEnable) {
        autoRebalanceScheduler.startup()
        autoRebalanceScheduler.schedule("partition-rebalance-thread", checkAndTriggerPartitionRebalance,
          5, config.leaderImbalanceCheckIntervalSeconds.toLong, TimeUnit.SECONDS)
      }
      deleteTopicManager.start()
  1. 更新zk上的controller epoch信息;
  2. 注册zk上的broker/topic节点变化事件通知;
  3. 初始化ControllerContext, 主要是从zk上获取broker, topic, parition, isr, partition leader, replicas等信息;
  4. 启动ReplicaStateMachine;
  5. 启动PartitionStateMachine;
  6. 发送所有的partition信息(leader, isr, replica, epoch等)到所有的 live brokers;
  7. 如果允许自动leader rebalance的话, 则启动AutoRebalanceScheduler;
  8. 启动TopicDeletionManager;
  9. KafkaController的启动图解:

KafkaController.png

Kafka源码分析-汇总
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.02.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前面我们已经分析了KafkaController中使用的一系列组件, 从本章开始,我们开始介绍KafkaController的各个功能:
  • KafkaController分析1-选主和Failover
  • KafkaController分析2-NetworkClient分析
  • KafkaController分析3-ControllerChannelManager
  • KafkaController分析4-Partition选主
  • KafkaController分析5-Partition状态机
  • KafkaController分析6-Replica状态机
  • KafkaController启动流程
  • Kafka源码分析-汇总
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档