ISR(In-Sync Replicas)是Kafka中用来实现消息持久化和高可靠的机制。它的主要作用是:
- 跟踪分区副本的同步状态,ISR中的副本之间的数据是同步的。
- 当ISR中的某个副本失效时,它会从ISR中移除,并选举另一个非ISR副本加入ISR,保证ISR中的副本个数不变。
- 生产者和Leader副本只会将消息写入ISR中的副本,这样可以保证当Leader失效时,新的Leader肯定包含所有历史消息。
- 如果ISR中的副本个数低于设定的最小值,那么对应分区将变为不可用状态,这可以保证消息持久化的高可靠性。
ISR的主要工作流程是:
- KafkaBroker启动时,会选举每个分区的Leader副本,Leader负责处理对应分区的读写请求。
- Leader会将新接收的消息同步写入本地日志,然后将消息批次同步到其他所有非ISR副本。
- 非ISR副本收到消息批次后会将其写入本地日志,然后同步ACK给Leader,Leader收到全部ACK后将这些副本加入ISR。
- 如果某ISR副本失效,Leader会将其从ISR中移除。然后从非ISR副本中选出新的副本加入ISR,使ISR副本个数不变。
- 只有ISR中的副本才会参与选举新的Leader副本,这样可以确保新的Leader包含完整的消息历史。
理解 Kafka 中 ISR 的作用机制,可以让我们合理地配置 Kafka 集群的副本数和 ISR 数,实现消息的高可靠性。