zookeeper 在kafka 中的作用

broker controller选举

  • zk中存放有broker 节点的配置信息和controller节点的配置信息
    使用zk命令 ls /brokers/ids

zookeeper 在kafka 中的作用

  • zk会根据监听父节点的子节点列表来进行controller的选举
    *
    zookeeper 在kafka 中的作用

topic中partition信息的存储

使用 zk 命令 ls /brokers/topics/city/partitions ,get /brokers/topics/city/partitions/0/state

zookeeper 在kafka 中的作用

  • 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。