kafka-关于ISR-概述

一. 什么是ISR ?

    Kafka 中通常每个分区都有多个副本,其中一个副本被选举为 Leader,其他副本为 Follower。ISR 是指与 Leader 副本保持同步的 Follower 副本集合。ISR 机制的核心是确保数据在多个副本之间的一致性和可靠性,同时在 Leader 副本出现故障时能够快速进行故障转移,保证服务的可用性。

二. ISR 基本原理:

1. 数据同步过程:
    首先: 生产者发送的消息首先会被 leader 副本接收,leader 副本会将消息写入本地日志文件,并更新其偏移量。follower 副本会定期向 leader 副本发送 fetch 请求,拉取新的消息。follower 副本在收到消息后,会将其写入本地日志文件,并更新自己的偏移量。如果 Follower 副本能够及时地从 leader 副本拉取到数据,并将其成功写入本地日志,那么该 follower 副本就被认为是与 leader 副本保持同步的,会被包含在 ISR 集合中。

2. ISR 变更:
     当一个新的 follower 副本启动并开始从 leader 副本拉取数据时,如果它能够在一定时间内跟上 leader 副本的进度,即它的日志偏移量与 leader 副本的差距在允许范围内,那么它就会被添加到 ISR 集合中。 反之,如果某个 follower 副本由于网络故障、磁盘故障等原因,导致它与 leader 副本的差距超过了一定的阈值,那么它就会被从 ISR 集合中移除。当 follower 副本恢复正常后,会尝试重新追赶 leader 副本,一旦追上,又会被重新加入到 ISR 集合中。


3. 选举与故障转移
选举:当 leader 副本出现故障时,kafka 会从 ISR 集合中选举一个 follower 副本作为新的 leader。通常选择 ISR 中日志偏移量最大的 follower 作为新 leader,因为它的数据与原 leader 最为接近,能够最大程度地保证数据的一致性。新的 leader 选举出来后,它会等待 ISR 中的其他副本将数据同步到自己的高水位,然后才会开始处理新的消息。这样可以确保在故障转移过程中,已经被 ISR 中的所有副本确认的消息不会丢失,从而保证了数据的一致性。

4. 涉及到的配置参数: 

       replica.lag.time.max.ms:用于配置 follower 副本与 leader 副本之间允许的最大延迟时间。如果 follower 副本在这个时间内没有向 leader 副本发送 fetch 请求或者没有跟上 leader 副本的进度,那么它将被认为是滞后的,并可能会被移出 ISR 集合。默认值是 10000 毫秒。
        replica.lag.max.messages:follower 副本与 leader 副本之间允许的最大消息滞后数量。如果 follower 副本落后 leader 副本的消息数量超过了这个阈值,它也可能会被移出 ISR 集合。

三.  查看ISR信息:

 查看某个topic的分区,ISR信息:

bin/kafka-topics.sh --describe --bootstrap-server 10.139.3.100:9092 --topic xxxx

​​​​​​​

  ----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
欢迎沟通交流!

(V: xiaoxiangbj2013 ) !

### Kafka 主副本机制概述 Kafka 的主副本机制(Leader-Follower 机制)是其高可用性和容错性的核心设计之一。在 Kafka 中,每个分区(Partition)都有一个主副本(Leader Replica)和多个从副本(Follower Replica)。主副本负责处理所有客户端的读写请求,而从副本则从主副本同步数据[^3]。 #### 主副本机制的工作原理 1. **分区与副本分配**:Kafka 中的主题(Topic)被划分为多个分区,每个分区可以有多个副本。这些副本分布在不同的 Broker 上,以实现数据的冗余存储。 2. **选举 Leader**:当分区的副本集合确定后,Kafka 会自动选择其中一个副本作为 Leader,其余副本为 Follower。只有 Leader 能够接收来自生产者的写请求和消费者的读请求。 3. **数据同步**:Follower 副本会定期从 Leader 副本拉取数据并进行同步。这种同步过程是异步的,因此可能会存在短暂的数据不一致情况。 4. **ISR(In-Sync Replicas)集合**:Kafka 维护了一个 ISR 集合,包含所有与 Leader 副本保持同步的副本。只有当消息被 ISR 集合中的所有副本确认后,该消息才会被认为是已提交(Committed),从而确保数据的持久性[^3]。 5. **故障转移**:如果当前的 Leader 副本发生故障,Kafka 会选择 ISR 集合中的一个 Follower 副本作为新的 Leader,继续提供服务。 #### 主副本配置的作用 主副本配置的主要作用是确保 Kafka 集群在面对节点故障时仍能正常运行,并且保证数据的一致性和持久性。以下是关键配置项及其作用: 1. **`replication.factor`**:指定分区的副本数量。例如,将 `replication.factor` 设置为 3 表示每个分区会有 3 个副本,分别分布在不同的 Broker 上[^2]。 2. **`min.insync.replicas`**:定义了 ISR 集合中至少需要多少个副本才能成功写入数据。如果 ISR 集合中的副本数量低于此值,则生产者将无法写入数据。 3. **`unclean.leader.election.enable`**:控制是否允许非 ISR 集合中的副本成为新的 Leader。如果设置为 `true`,即使某个副本未完全同步也可以被选为 Leader;如果设置为 `false`,则只有 ISR 集合中的副本才能成为 Leader[^4]。 #### 主副本配置方法 以下是一些常见的 Kafka 主副本配置方法: 1. **修改 Kafka 配置文件**: 在 Kafka 的 `server.properties` 文件中,可以设置与主副本相关的参数。例如: ```properties replication.factor=3 min.insync.replicas=2 unclean.leader.election.enable=false ``` 2. **使用 Kafka 管理工具**: Kafka 提供了一系列管理脚本,用于查看和调整分区的副本状态。例如,使用以下命令可以列出所有主题的分区详情: ```bash ./kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-topic ``` 输出结果中会显示每个分区的 Leader、Replicas 和 ISR 信息[^4]。 3. **动态调整副本分配**: 如果需要重新分配分区的副本,可以使用 Kafka 提供的 `kafka-reassign-partitions.sh` 工具。例如: ```bash ./kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file reassign.json --execute ``` ### 示例代码:查看分区详情 以下是一个简单的脚本,用于查看 Kafka 集群中某个主题的分区详情: ```bash #!/bin/bash ZOOKEEPER="localhost:2181" TOPIC="my-topic" ./kafka-topics.sh --describe --zookeeper $ZOOKEEPER --topic $TOPIC ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值