Kafka集群中如何平衡Topics
当一个kafka集群中一个节点关闭或者宕机,该服务器的负载任务将分配到集群中的其他节点,这种分配是不均匀的;即负载不是均匀的分布在集群中所有节点,我们需要做一些措施来实现这一平衡(也称为再平衡)。 再平衡我们需要注意两件事情。一是leader连任,或首选副本选举,另一种是分区的再平衡。多数情况下,一个节点宕机,然后过段时间又重新加入集群,第二种情况就是,当我们想要么减少或增加集群中节点的数目。 让我们来看看如何处理这些不同的场景平衡Topic的情况。 我下面的案例以5个broker的kafka集群为例。为什么我们需要平衡Topic
有两种方法来处理这种情况。 一种是添加以下行到代理配置“auto.leader.rebalance.enable”自动重新平衡,但这个报告是个问题 。 另一种方法是手动使用“kafka-preferred-replica-election.sh”的工具。 编辑配置文件server.properties配置文件,添加auto.leader.rebalance.enable = false [attach]1386[/attach] 我们让broker4宕机,然后看看topic负载如何分布 [attach]1387[/attach] 在这里我们可以看到负载不均匀分布,接下来我们在恢复broker4看看。 [attach]1388[/attach] 现在,我们可以看到,即使broker4已经恢复到集群中服务了,但是它不是作为一个领导者作用于任何分区。那让我们使用kafka-preferred-replica-election.sh工具来平衡负载试试。 [attach]1389[/attach] [attach]1390[/attach] 现在我们可以看到topic分布是平衡的。案例1:当broker因为维护或由于服务器故障而关闭,并在一定的时间恢复
我们创建了一个新的broker,即使设置其borker.id为以前的broker的ID,那也是不能恢复的,只能手动运行kafka-preferred-replica-election.sh是topic平衡。案例2:一个节点宕机且无法恢复
增加或者删除节点,平衡topic步骤如下:案例3:增加或者减少kafka集群中节点数量
- 使用分区重新分配的工具(kafka-reassign-partition.sh),使用--generta参数生成一个推荐配置,这显示了当前和建议的副本分配情况;
- 复制推荐分配配置方案到jason文件中;
- 执行分区重新分配工具(kafka-reassign-partition.sh -execute)来更新元数据平衡。 确保运行的时候集群中节点负载问题,因为这个过程是在不同节点间发生数据移动;
- 等待一段时间(基于必须移动一定量的数据),并使用--verify选项验证平衡成功完成
- 一旦分区重新分配完成后,运行“kafka-preferred-replica-election.sh”工具来完成平衡。
3 个评论
不错,but
[root@]# bin/kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181 --topics-to-move topics-to-move.json --broker-list "0,1,2" --generate
Partitions reassignment failed due to topics-to-move.json (没有那个文件或目录)
java.io.FileNotFoundException: topics-to-move.json (没有那个文件或目录)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at kafka.utils.Utils$.readFileAsString(Utils.scala:463)
at kafka.admin.ReassignPartitionsCommand$.generateAssignment(ReassignPartitionsCommand.scala:90)
at kafka.admin.ReassignPartitionsCommand$.main(ReassignPartitionsCommand.scala:47)
at kafka.admin.ReassignPartitionsCommand.main(ReassignPartitionsCommand.scala)