kafka 在线修改副本数

为解决集群磁盘紧张问题,通过调整Kafka topic的replication-factor参数,将副本数从3减至2,有效释放磁盘空间。文章详细记录了使用kafka-reassign-partitions命令的具体步骤,包括调查分区副本信息、制作配置文件、执行分区重分配及验证结果。

背景  

  前段时间由于集群各台机器配置不一样,导致部分机器磁盘吃紧。定位发现kafka log数据占了一半的容量,而且某一个topic的数据惊人,50个partition,每个partition24G,3副本。算了一下3.6T的磁盘容量。而目前已经调整到3天的保留时间,不能再短了,只好缩减一下replication-factor的数量由3变为2,这样整个容量减少三分之一,也是很可观的量。

尝试

考虑到是kafka topic相关的属性,尝试命令

发现好像有点戏,于是就尝试修改某个topic下数据的副本数

原来这个参数不能改副本数只可以修改partition数量,官方说明

继续查看kafka命令发现有个kafka-reassign-partitions命令,研究一下

这边有个--reassignment-json-file参数可以指定topic下某个分区和对应副本所在的机器(broker.id),那我要是修改它的副本列表是否可以减少他的副本数呢,带着疑问就去尝试吧。

实验步骤

1. 调查topic=test001 分区副本信息

2. 制作分区副本配置文件,就是那个参数的json文件

3. 使用配置文件重新制定分区信息

4. 验证(分区副本信息,kafka log data的数量变化情况)

1. 调查topic=test001 分区副本信息

> kafka-topics --topic test001 --zookeeper localhost:2181/kafka --describe

2. 制作分区副本配置文件,就是那个参数的json文件

3. 使用配置文件重新制定分区信息

kafka-reassign-partitions --zookeeper localhost:2181/kafka --reassignment-json-file abc.json --execute

4. 验证(分区副本信息,kafka log data的数量变化情况)

kafka-topics --topic test001 --zookeeper localhost:2181/kafka --describe

确实分区副本信息中心变化了,从3个副本变成了2个。

再去验证数据

执行前

执行后,发现129上确实没有了topic=test001的partition 3的数据目录了

 

### Kafka 副本数的配置与作用 Kafka副本机制是其高可用性和数据可靠性的重要保障。副本数的配置直接影响到 Kafka 的容错能力、性能和存储成本。 #### Kafka 副本数的作用 Kafka 副本的主要作用是提高数据的可靠性。通过在多个 Broker 上存储相同的数据副本Kafka 能够在某个 Broker 发生故障时,继续提供数据读写服务[^3]。此外,副本还支持 Kafka 的故障转移机制,确保服务的高可用性。Kafka 中的副本分为 Leader 和 Follower 两种角色,生产者只会将数据发送到 Leader 副本,而 Follower 副本则通过从 Leader 同步数据来保持一致性[^3]。 Kafka副本集合(AR)包括所有分配给某个分区的副本,而 AR 又分为两个子集:ISR(In-Sync Replicas)和 OSR(Out-of-Sync Replicas)。ISR 是与 Leader 保持同步的 Follower 副本集合,而 OSR 是那些由于同步延迟过多而被踢出 ISR 的副本。在 Leader 发生故障时,Kafka 会从 ISR 中选举一个新的 Leader,以确保数据的一致性。 #### Kafka 副本数的配置 在 Kafka 中,副本数是在创建 Topic 时通过 `--replication-factor` 参数进行配置的。例如,以下命令创建了一个具有 3 个分区和 3 个副本的 Topic: ```bash bin/kafka-topics.sh --zookeeper gw04:2181,gw05:2181,gw06:2181 --create --partitions 3 --replication-factor 3 --topic bms_clean_dwm_es11_yb ``` 一旦 Topic 创建完成,副本数不能直接修改,这是 Kafka 的设计决策之一,主要出于数据一致性、存储和分布式负载均衡的考虑[^2]。 在生产环境中,通常建议将副本数设置为 3,这是一个在容错能力和存储成本之间的良好平衡点。虽然 Kafka 默认的副本数为 1,但为了提高数据可靠性,生产环境一般会配置为 2 个或更多副本。然而,副本数过多会增加磁盘存储空间和网络传输的开销,从而降低系统的整体效率[^1]。 ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值