broker controller 选举
- zk 中存放有 broker 节点的配置信息和 controller 节点的配置信息
使用 zk 命令 ls /brokers/ids
- zk 会根据监听父节点的子节点列表来进行 controller 的选举
topic 中 partition 信息的存储
使用 zk 命令 ls /brokers/topics/city/partitions,get /brokers/topics/city/partitions/0/state
- productor 生成消息的时候,首先通过 broker controller 从 zk 中读取所有的 partition leader。返回给 porductor。
kakfa 0.9 版本之前 zk 会进行 partition leader 选举存在的问题
将 leader 的选举交给 zk 也就是交给第三方会存在脑裂问题。什么是脑裂?
以 partittion leader 选举为例。当 ledader 和 zk 之间出现网络抖动,zk 认为 leader 挂掉的时候,会选举出一个新的 leader。
但是之前的 leader 并没有宕机,也就是假死。这样就会有两个 leader。同时接受写请求的话,会造成数据不一致问题。
怎么解决 leader 的脑裂问题?
当 leader 选举出来后,稍微有个延迟,将新 leader 的消息同步给原理的 leader。原来 leader 会变为 follower。