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。