目录
Controller
每个broker启动会向zk创建一个临时序号节点,获得的序号最小的那个broker将会作为集群的controller
1.负责管理整个集群的分区和副本,当leader挂了之后,它可以从ISR中找到下一个broker中的分区副本作为新leader(选举新的leader)
2.当leader宕机后会将消息传递给其他分区副本(本质就是zk,感受ISR集合的变化并且传递变化消息——>利用watch机制观察ISR集合的节点)
3.当ISR中新增分区或者减少,也会同步消息给其他的broker

Rebalance
当消费消息的消费者宕机后,触发重平衡机制,选择其他消费者继续消费
或者说当消费组的消费者和分区的关系发生变化的时候会触发这种机制
range指定,轮询,sticky,range:sum(分区总数)/消费者总数+1
sticky:粘合策略,如果需要rebalance,会在之前已经分配的基础上做出调整,不会改变之前的分配情况,如果没有开启该策略就会重新全部分配,效率较低,建议开启

HW(高水位)
用HW防止数据丢失,可能副本还没有同步好leader的消息就被消费者消费,那么当leader宕机之后消息就丢失了,因为会产生新的leader
消费者最多只能消费到HW的位置,对于leader新写入的消息,consumer不能立即消费而是等待该消息被ISR集合进行同步,之后再更新HW,更新完就可以消费
HW取决于ISR中最小的LEO(某个副本最后消息的消息位置)——>每个broker完成这个消息的同步之后,HW才会变化
