副本
副本是为了为主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有⼀个副本作为leader,其他是follower。
下图是拥有2个分区,3个副本的主题:
- leader:kafka的写和读的操作,都发⽣在leader上。leader负责把数据同步给follower。当leader挂了,经过主从选举,从多个follower中选举产⽣⼀个新的leader。
- follower:接收leader同步的数据,在leader宕机后参与选举。
- isr:可以同步和已同步的节点会被存入到isr集合中。如果isr中的节点性能较差,会被踢出isr集合(不能参与选举)。
集群消费
图中Kafka集群有两个broker,每个broker中有多个partition。
一个partition只能被一个消费组里的某一个消费者消费,从而保证消费顺序。
Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同⼀个topic中的多个partition中保证总的消费顺序性。
一个消费者可以消费多个partition,但是消费者组中的消费者数量不能比一个topic中的partition数量多,否则多出来的消费者消费不到消息。
如果消费者宕机,会触发rebalance机制,让其他消费者来消费该分区。