kafka-集群缩容

一. 简述:

     当业务增加时,服务瓶颈,我们需要进行扩容。当业务量下降时,为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器,预计缩到 10 台机器,那么需要做 5 次缩容操作,每次将一个节点下线,那么现在问题就是如何正确、安全地从 Kafka 集群中移除一台 broker?搞定这个之后,重复 5 次即可(也可以根据实际情况,一次多台)。

     一个 broker 下线,它上面的所有 partition 都会处于副本不足的状态,并且 Kafka 集群不会在其它的 broker 上生成这些副本,因此,在将一个 broker 从集群中移除之前,需要将这个 broker 上的 partition 副本都转移到最终会保留的 10 台机器上,怎么实现这个呢?Kafka 自带的分区重分配工具。

    在集群数据量较大的情况下,分区的转移可能会花费较长时间,那么在转移过程中最好不要创建新 topic,不然新的 topic 有可能又创建到要被移除的 broker 上,当然如果实在无法避免的话,可以再对新的 topic 进行一次额外的转移。

二. 缩容步骤:

    需要先获取所有 broker 的 broker id,选择待移除的 broker。 使用 kafka-reassign-partitions 脚本将待移除 broker 上的 partition 均匀地转移到最终会留在集群的 broker 上。确认待移除 broker 上没有任何 partition 之后,在 对这个 broker 进行停止和删除。其中重点是 partition 的转移或者说重分配。

  1. 获取brokerID :

     可以通过管理工具,或者命令行,配置文件,都可以。 命令行的话:

./kafka-broker-api-versions.sh --bootstrap-server localhost:9092

  工具

Kafka集群时,ISR(In-Sync Replicas)机制会进行相应的动态调整,以保证数据的一致性和可用性。 ### 扩时的动态调整 当Kafka集群时,新的Broker加入到集群中。Kafka会根据配置和负载情况,将一些分区的副本分配到新的Broker上。新的副本开始从分区的Leader副本同步数据。在同步过程中,Kafka会持续监控副本的同步状态。如果新副本能够在规定的时间内赶上Leader副本的数据进度,就会被加入到ISR集合中。例如,原本一个分区的ISR集合中有3个副本,扩后新的副本加入并完成同步,ISR集合就会增加到4个副本。这一过程有助于提高集群错能力和负载均衡能力,因为更多的副本意味着在部分Broker故障时,仍能保证数据的可用性和一致性。 ### 时的动态调整 当Kafka集群时,部分Broker会被移除。在移除之前,Kafka会将这些Broker上的分区副本进行迁移。分区的Leader副本会停止向即将移除的副本同步数据,并且会等待这些副本将未同步的数据处理完成。一旦这些副本的数据同步完成或者达到一定的条件,它们会被从ISR集合中移除。例如,某个Broker要被移除,该Broker上的一个分区副本原本在ISR集合中,在迁移过程中,这个副本会被从ISR集合中剔除。同时,Kafka会重新选举分区的Leader副本,以保证数据的正常读写。 ```python # 这里是一个简单的示意代码,展示如何理解ISR集合的动态变化 # 假设这是一个简单的ISR集合管理类 class ISRManager: def __init__(self): self.isr = [] def add_replica(self, replica): # 模拟新副本加入ISR集合 self.isr.append(replica) def remove_replica(self, replica): # 模拟副本从ISR集合中移除 if replica in self.isr: self.isr.remove(replica) def get_isr(self): return self.isr # 创建一个ISR管理器实例 isr_manager = ISRManager() # 模拟扩时新副本加入 new_replica = "new_replica_1" isr_manager.add_replica(new_replica) print(f"扩后ISR集合: {isr_manager.get_isr()}") # 模拟时副本移除 replica_to_remove = "old_replica_1" isr_manager.remove_replica(replica_to_remove) print(f"后ISR集合: {isr_manager.get_isr()}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值