(七)kafka的更新机制
A. 基础概念
- 定义:元数据指用于寻找其他数据的标识,在kafka这类分布式集群中元数据特指各个节点brokers间所需的共享数据,如controller-epoch之类的信息。
- 方式:kafka的元数据选用zookeeper来进行集中管理,使用
/zkCli.sh -server 127.0.0.1
后get /brokers/ids/0
查看信息。 - 核心内容:kafka集群中的元数据记录了broker的通信地址、各项配置信息、集群状态、acl信息等,其具体作用有两类。
- 客户端zookeeper:通过元数据获取服务地址,完成通信(服务发现)。
- 服务端kafka:通过元数据共享集群状态,一旦状态变化后,controller能够快速感知并通知到broker进行更新。
B. 元数据metadata定义
- broker级别的metadata
- 查看命令:
ls /brokers
- ids:
get /brokers/ids/0
,可以看到监听地址(kafka的地址+port)等信息。 - topics:
get /brokers/topics/xxxtopic/partitions/0
,会获取到controller epoch,leader epoch,leader所在broker,分区信息 & isr等信息。 - seqid:seqid信息主要用于自动生成brokerid。
- 查看命令:
- 配置信息级别的metadata
- 查看命令:
ls /config
- 配置信息分类:共含有5类,changes、clients、brokers、topics & users。
- 除了changes,其他均可由kafka-configs.sh脚本进行动态配置。
- 注意:这些配置是持久化在zk上的,所以即便修改server.properties并重启也不会改变zk内的值,只有通过kafka-configs.sh才可对持久化数据更改。
- 查看命令:
C. 元数据metadata更新
- 概述:metadata保存在zk上,一般通过注册watcher监听metadata变化并更新,kafka基于controller & controller的watcher完成。
- 流程案例
- isr更新,若原本逻辑需要在zk的brokers/topics/xxxtopic/isr_change_notification路径下创建节点。
- 现在基于controller,不需要zk直接创建节点,只需要controller注册对于该路径的监听即可。
- 元数据在出现变化时,会向约定好的/notification或者/changes目录下创建对应的节点,并写入对应的信息。controller或者broker 只需对约定好的目录添加监听器即可迅速感知到集群元数据的变化,这很大程度上减小了Wacther的注册数量,简化了代码实现。
- 总结:利用controller统一管理集群,controller自身会注册大量watchers,但是降低了别的broker的watchers。