本文主要查看kafka在zookeeper中的一些存储结构,便于更好的理解kafka的工作原理,其测试环境如下:

kafka 0.8.1.1
zookeeper 3.4.5

1 Broker node 注册

当一个kafka broker启动后,会向zookeeper注册自己的节点信息,该节点为一个临时节点,当当broker断开和zookeeper的连接时,其临时节点将会被删除。

其路径为:

/broker/ids/[0...N] 

其中[0..N]表示broker id(broker id唯一,不可以重复),znode的值为对应broker的相关信息,如下:

{
    "jmx_port": -1, //JMX的端口号
    "timestamp": "1460082147315",//broker启动的时间戳
    "host": "xx.xxx.xxx.xxx",//host
    "version": 1,//默认的版本
    "port": 9092  //broker进程的对外监听的端口号
}

如下为zk下的运行实例图:

这里写图片描述

2 Broker Topic 注册

当一个broker启动时,会向zookeeper注册自己持有的topic和partitions信息。
其路径为:

/broker/topics/[topic]/partitions/[0...N] 

其中[0..N]表示partition索引号。其zonode下的信息如下:

{
    "controller_epoch": 17,//中央控制器的总的选举次数
    "leader": 0,  //此partition的broker leader的id
    "version": 1, //默认版本号
    "leader_epoch": 1,//此partition的leader选举的次数
    "isr": [
        0
    ]    //同步副本组brokerId顺序列表
}

如下为zk下的运行实例图:

这里写图片描述

3 Consumer id 注册

在kafka consumer的配置参数中有:

#消费者的ID,若是没有设置的话,会自增
consumer.id

当然,consumer id也可以手动设置。
在zookeeper查看相关consumer id的注册信息,其路径如下:

/consumers/[group_id]/ids/[consumer_id]

这仍然是一个临时的znode,此节点的值为格式如下:

{
    "version": 1,
    "subscription": {
        "user11": 1
    },
    "pattern": "static",
    "timestamp": "1460083658252"
}

{“topic_name”:#streams…},即表示此consumer目前所消费的topic + partitions列表。

如下为zk下的运行实例图:

这里写图片描述

4 Consumer offset 跟踪

用来跟踪每个consumer group目前所消费的partition中最大的offset。

其路径为:

/consumers/[group_id]/offsets/[topic]/[partition_id]

此znode为永久节点,可以看出offset跟group_id有关,以表明当group中一个消费者失效,其他consumer可以继续消费。

如下为zk下的运行实例图:

这里写图片描述

5 Partition Owner 注册

用来标记partition被哪个consumer消费,为临时节点。
其路径为:

/consumers/[group_id]/owners/[topic]/[partition_id]

如下为zk下的运行实例图:

这里写图片描述

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐