作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
阶段1、深入多线程
阶段2、深入多线程设计模式
阶段3、深入juc源码解析
码哥源码部分
码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】
码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】
码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】
码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】
打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】
当Kafka集群中的一个Broker节点突然宕机,那么这个节点上的分区副本就已经处于功能失效的状态了,Kafka并不会自动将这些失效分区副本迁移到其它Broker节点上;或者说,当集群中新增一个Broker时,这个Broker上没有任何分区副本,Kafka也不会自动将其它Broker上已有的一些分区副本重分配到该新加入的Broker中。
所以,这就是涉及到了 分区重分配(reblance)问题 ,本章,我就对分区重分配的整体流程和底层原理进行讲解。
一、重分配策略
执行分区重分配,第一件事情就是要生成重分配方案。Kafka提供了 kafka-reassign-partitions.sh
脚本,用来生成重分配策略,并执行分区重分配工作,它可以在集群扩容、 Broker节点挂掉的场景下对分区副本进行迁移。
1.1 脚本使用
我们先来看下kafka-reassign-partitions.sh
脚本的基本使用,主要包含三个步骤:
- 创建一个包含要进行分区重分配的Topic清单的JSON 文件;
- 根据Topic清单和Broker节点清单生成一份 重分配方案 ;
- 根据方案执行重分配动作。
我通过一个示例来讲解下,假设现有3个Broker组成的Kafka集群,一个名为topic-reassign
的主题,包含4个分区,每个分区有2个副本,当前的分区副本分配状态如下:
Topic : topic-reassign Partition : 0 Leader: 0 Replicas: 0,2 Isr : 0,2
Topic : topic-reassign Partition : 1 Leader: 1 Replicas: 1,0 Isr : 1,0
Topic : topic-re