《kafka问答100例 -4》 如果我手动在zk中添加/brokers/topics/{TopicName}节点会怎么样?

2021-12-31 16:28:00 浏览数 (3)

如果我手动在zk中添加`/brokers/topics/{TopicName}`节点会怎么样?

先说结论: 根据上面分析过的源码画出的时序图可以指定; 客户端发起创建Topic的请求,本质上是去zk里面写两个数据

  1. topic的配置信息 /config/topics/Topic名称 持久节点
  2. topic的分区信息/brokers/topics/Topic名称 持久节点 所以我们绕过这一步骤直接去写入数据,可以达到一样的效果;不过我们的数据需要保证准确 因为在这一步已经没有了一些基本的校验了; 假如这一步我们写入的副本Brokerid不存在会怎样,从时序图中可以看到,leaderAndIsrRequest请求; 就不会正确的发送的不存在的BrokerId上,那么那台机器就不会创建Log文件;

下面不妨让我们来验证一下; 创建一个节点/brokers/topics/create_topic_byhand_zk 节点数据为下面数据; {"version":2,"partitions":{"2":[3],"1":[3],"0":[3]},"adding_replicas":{},"removing_replicas":{}}

这里我用的工具PRETTYZOO手动创建的,你也可以用命令行创建; 创建完成之后我们再看看本地有没有生成一个Log文件

可以看到我们指定的Broker,已经生成了对应的分区副本Log文件; 而且zk中也写入了其他的数据

在我们写入zk数据的时候,就已经确定好了哪个每个分区的Leader是谁了,那就是第一个副本默认为Leader

0 人点赞