Apache kafka系列之在zookeeper中存储结构
1、topic注册信息
/brokers/topics/[topic] :存储某个topic的partitions所有分配信息
Schema: { "version": "版本编号目前固定为数字1", "partitions": { "partitionId编号": [ 同步副本组brokerId列表 ], "partitionId编号": [ 同步副本组brokerId列表 ], ....... } } Example: { "version": 1, "partitions": { "0": [1, 2], "1": [2, 1], "2": [1, 2], } } 说明:紫红色为patitions编号,蓝色为同步副本组brokerId列表
2、partition状态信息
/brokers/topics/[topic]/partitions/[0...N] 其中[0..N]表示partition索引号
/brokers/topics/[topic]/partitions/[partitionId]/state
Schema: { "controller_epoch": 表示kafka集群中的中央控制器选举次数, "leader": 表示该partition选举leader的brokerId, "version": 版本编号默认为1, "leader_epoch": 该partition leader选举次数, "isr": [同步副本组brokerId列表] } Example: { "controller_epoch": 1, "leader": 2, "version": 1, "leader_epoch": 0, "isr": [2, 1] }
3、Broker注册信息
/brokers/ids/[0...N]:每个broker的配置文件中都需要指定一个数字类型的id(全局不可重复),此节点为临时znode(EPHEMERAL)
Schema: { "jmx_port": jmx端口号, "timestamp": kafka broker初始启动时的时间戳, "host": 主机名或ip地址, "version": 版本编号默认为1, "port": kafka broker的服务端端口号,由server.properties中参数port确定 } Example: { "jmx_port": 6061, "timestamp":"1403061899859" "version": 1, "host": "192.168.1.148", "port": 9092 }
4、Controller epoch
/controller_epoch -> int (epoch) :此值为一个数字,kafka集群中第一个broker第一次启动时为1,以后只要集群中center controller中央控制器所在broker变更或挂掉,就会重新选举新的center controller,每次center controller变更controller_epoch值就会 + 1
5、Controller注册信息
/controller -> int (broker id of the controller) 存储center controller中央控制器所在kafka broker的信息
Schema: { "version": 版本编号默认为1, "brokerid": kafka集群中broker唯一编号, "timestamp": kafka broker中央控制器变更时的时间戳 } Example: { "version": 1, "brokerid": 3, "timestamp": "1403061802981" }
原文链接请参见:http://blog.csdn.net/lizhitao/article/details/23744675