kafka 集群元数据管理

AdminManager

admin管理类 包含了 元数据缓存和 zk 监听客户端
class AdminManager(val config: KafkaConfig,
val metrics: Metrics,
val metadataCache: MetadataCache,
val zkClient: KafkaZkClient)

  • zk 注册监听处理器
    case EventType.NodeChildrenChanged => zNodeChildChangeHandlers.get(path).foreach(.handleChildChange())
    case EventType.NodeCreated => zNodeChangeHandlers.get(path).foreach(
    .handleCreation())
    case EventType.NodeDeleted => zNodeChangeHandlers.get(path).foreach(.handleDeletion())
    case EventType.NodeDataChanged => zNodeChangeHandlers.get(path).foreach(
    .handleDataChange())
  • 监听到的事件放入 事件管理器的 事件队列 EventManager
    根据事件类型 KafkaController::process

集群控制器 controller 注册

集群启动后,broker 在 /controller 节点注册controller, 负责启动自选举或者分配 partition 主备策略。

  • controller 不存在, brokerid 和 epoch 写入 zk 这个节点
  • 对于controller 注册成功的 broker ,tcp 消息 通知其他broker 更新元数据,此时只有所有brokerid
  • 初始化本地副本状态机, 初始化分区状态机
  • 对于配置有推荐leader(PreferredReplicaLeaderElection),在 brokers/topics 节点根据配置 leader和isr, 更新分区状态机, 并通知其他brokerid
  • 如果配置自由选leader,启动 AutoPreferredReplicaLeaderElection

PreferredReplicaElection

1.计算分区和每个分区的leader 和 follower

  1. controller 修改partition 状态机
    新分区-> 上线分区
    上线分区, 下线分区 -> 上线分
    上线分区, 下线分区, 新分区 -> 下线分区
    下线分区 -> 不存在的分区

  2. controller 发送 tcp 消息给对应的broker
    sendLeaderAndIsrRequest
    sendUpdateMetadataRequests
    sendStopReplicaRequests

  3. leader 或者follower 处理 controller 上述请求
    replicaManager::becomeLeaderOrFollower
    leader
    1. Stop fetchers for these partitions
    2. Update the partition metadata in cache
    3. Add these partitions to the leader partitions set
    follower
    1. Remove these partitions from the leader partitions set.
    2. Mark the replicas as followers so that no more data can be added from the producer clients.
    3. Stop fetchers for these partitions so that no more data can be added by the replica fetcher threads.
    4. Truncate the log and checkpoint offsets for these partitions.
    5. Clear the produce and fetch requests in the purgatory
    6. If the broker is not shutting down, add the fetcher to the new leaders.

flower 同步leader log文件

ReplicaManager:makeFollowers

  1. 初始化需要同步log文件的分区 + leaderEpoch + fetchOffset
  2. replicaFetcherManager 启动fetch 线程拉日志(ReplicaFetcherThread)
  3. ReplicaFetcherThread
    maybeTruncate()
    maybeFetch()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值