leader会维持一个与其保持同步的replica集合,该集合就是ISR,每一个leader partition都有一个ISR,leader动态维护, 要保证kafka不丢失message,就要保证ISR这组集合存活(至少有一个存活),并且消息commit成功。Partition leader 保持同步的 Partition Follower 集合, 当 ISR 中的Partition Follower 完成数据的同步之后,就会给 leader 发送 ack。如果Partition follower长时间(replica.lag.time.max.ms) 未向leader同步数据,则该Partition Follower将被踢出ISR。Partition Leader 发生故障之后,就会从 ISR 中选举新的 Partition Leader。
副本数据的同步,由kafka内置的同步线程来自动处理,一般不需要人工干预!
如果出现副本一直不同步:
1、查看是不是broker问题,重启broker
2、增大同步线程数:num.replica.fetchers,默认为1
3、查看Partition的leader 节点的broker,是否出现性能瓶颈:磁盘IO,网络IO等