Apache Kafka 移除 ZK Proposals( 三 )


文章插图
 
Offline
当 broker 进程为 Offline 状态,它要么没有启动,要么在执行启动所需的单节点任务,比如,初始化 JVM 或者执行恢复日志 。
Fenced
当 broker 处于 Fenced 状态,它将不再响应来自客户端的 RPC 请求 。broker 在启动后,尝试拉取最新的元数据时,将处于 fenced 状态 。如果无法联系活动控制器,broker 将重新进入 fenced 状态 。发给客户端的元数据应该忽略状态为 fenced 的 broker 。
Online
当 broker 状态为 online 时,表示该 broker 准备好响应客户端的请求了 。
Stopping
broker 进入 stoppoing 状态表示它们收到 SIGINT 信号 。该信号表明系统管理员要关闭 broker 。
broker 在 stopping 状态时,仍在运行,但是我们尝试将分区 leader 从 broker 中移除 。
最后,活动控制器在 MetadataFetchResponse 中添加一串特殊的代码,要求 broker 进入 offline 状态 。或者,如果 leader 在预先定义的时间内没有动作,broker 将关闭 。
将已有的 API 迁移到控制器中
之前的很多直接写入 Zookeeper 的操作将变为写入控制器 。例如,变更配置、修改保存默认授权的 ACLs,等等 。
新版本的客户端应该将这些操作直接发给活动控制器 。这是一个向后兼容的变更:在新旧集群中都能正常工作 。为了兼容老客户端,这些操作将随机发送给 broker,broker 将这些请求转发给活动控制器 。
新的控制器 API
在某些情况下,我们需要创建一个新的 API 替换之前通过 Zookeeper 完成的操作 。例如,当分区 leader 要修改 in-sync replica 集合时,在后 ZK 时代的世界里,它直接修改 Zookeeper,现在,leader 发起一个 RPC 请求到活动控制器 。
从工具包中移除直接访问 Zookeeper
目前,一些工具和脚本直接联系 Zookeeper 。在后 Zookeeper 时代的世界里,这些工具将被 Kafka API 取代 。幸运的是,“KIP-4:命令行和中心化管理操作”,在几年前开始移除直接访问 Zookeeper,并且快完成了 。




推荐阅读