1.controller
集群中谁来充当controller
kafka集群中的broker在zookeeper中创建的临时序号节点,序号最小的节点(最先创建的节点)将作为集群的controller,负责管理整个集群中的所有分区和副本的状态
- 当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本
- 当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息
- 当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责让新分区被其他节点感知到
2.rebalance机制
前提是:消费者没有指明分区消费,当消费组里的消费者和分区的关系发生变化,那么就会触发rebalance机制
这个机制会重新调整消费者消费哪个分区
在触发rebalance机制之前,消费者消费哪个分区有三个策略:
- range:通过公式计算某个消费者消费哪个分区
- 轮询:轮流消费
- sticky: 粘合策略,如果需要rebalance,会在之前已分配的基础上调整,不会改变之前的分配情况,如果这个策略没有开,那么就要进行全部的重新分配,建议开启
3.HW和LEO机制
HW:高水位 已同步完成的位置,消息在写入broker时,且每个broker完成这条消息的同步后,hw才会变化,在这之前消费者是消费不到这条消息的,在同步完成之后,hw更新之后,消费者才能消费到这条消息,这样的目的是防止消息的丢失
LEO:是某个副本最后消息的位置(log-end-offset)