kafka集群扩容后的topic分区迁移

kafka集群扩容后的topic分区迁移

./bin/kafka-topics.sh --zookeeper node3:2181,node4:2181,node5:2181  --alter --topic dftt --partitions 4

kafka集群扩容后,新的broker上面不会数据进入这些节点,也就是说,这些节点是空闲的;它只有在创建新的topic时才会参与工作。除非将已有的partition迁移到新的服务器上面;
所以需要将一些topic的分区迁移到新的broker上。

kafka-reassign-partitions.sh是kafka提供的用来重新分配partition和replica到broker上的工具
简单实现重新分配需要三步:

  • 生成分配计划(generate)
  • 执行分配(execute)
  • 检查分配的状态(verify)

具体操作如下:

1. 生成分配计划

编写分配脚本:
vi topics-to-move.json

内容如下:

{"topics":
    [{"topic":"event_request"}],
    "version": 1
}

执行分配计划生成脚本:

kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --topics-to-move-json-file topics-to-move.json --broker-list "5,6,7,8" --generate

执行结果如下:

[[email protected] topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --topics-to-move-json-file topics-to-move.json --broker-list "5,6,7,8" --generate
Current partition replica assignment  #当前分区的副本分配

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[3,4]},{"topic":"event_request","partition":1,"replicas":[4,5]}]}
Proposed partition reassignment configuration #建议的分区配置

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[6,5]},{"topic":"event_request","partition":1,"replicas":[7,6]}]}

Proposed partition reassignment configuration 后是根据命令行的指定的brokerlist生成的分区分配计划json格式。将 Proposed partition reassignment configuration的配置copy保存到一个文件中 topic-reassignment.json
vi topic-reassignment.json

{"version":1,"partitions":[{"topic":"event_request","partition":0,"replicas":[6,5]},{"topic":"event_request","partition":1,"replicas":[7,6]}]}

2. 执行分配(execute)

根据step1 生成的分配计划配置json文件topic-reassignment.json,进行topic的重新分配。

kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --execute

执行前的分区分布:

[[email protected] topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request PartitionCount:2    ReplicationFactor:2 Configs:
    Topic: event_request    Partition: 0    Leader: 3   Replicas: 3,4   Isr: 3,4
    Topic: event_request    Partition: 1    Leader: 4   Replicas: 4,5   Isr: 4,5

执行后的分区分布:

[[email protected] topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request PartitionCount:2    ReplicationFactor:4 Configs:
    Topic: event_request    Partition: 0    Leader: 3   Replicas: 6,5,3,4   Isr: 3,4
    Topic: event_request    Partition: 1    Leader: 4   Replicas: 7,6,4,5   Isr: 4,5

3. 检查分配的状态

查看分配的状态:正在进行

[[email protected] topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --verify
Status of partition reassignment:
Reassignment of partition [event_request,0] is still in progress
Reassignment of partition [event_request,1] is still in progress
[[email protected] topic_reassgin]$ 

查看“is still in progress” 状态时的分区,副本分布状态:

发现Replicas有4个哦,说明在重新分配的过程中新旧的副本都在进行工作。

[[email protected] topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request PartitionCount:2    ReplicationFactor:4 Configs:
    Topic: event_request    Partition: 0    Leader: 3   Replicas: 6,5,3,4   Isr: 3,4
    Topic: event_request    Partition: 1    Leader: 4   Replicas: 7,6,4,5   Isr: 4,5

查看分配的状态:分配完成。

[[email protected] topic_reassgin]$ kafka-reassign-partitions.sh --zookeeper $ZK_CONNECT --reassignment-json-file topic-reassignment.json --verify
Status of partition reassignment:
Reassignment of partition [event_request,0] completed successfully
Reassignment of partition [event_request,1] completed successfully

查看“completed successfully”状态的分区,副本状态:

已经按照生成的分配计划正确的完成了分区的重新分配。

[[email protected] topic_reassgin]$ le-kafka-topics.sh --describe --topic event_request
Topic:event_request PartitionCount:2    ReplicationFactor:2 Configs:
    Topic: event_request    Partition: 0    Leader: 6   Replicas: 6,5   Isr: 6,5
    Topic: event_request    Partition: 1    Leader: 7   Replicas: 7,6   Isr: 6,7

原文地址:https://www.cnblogs.com/mylovelulu/p/10283044.html

时间: 2024-10-10 12:51:12

kafka集群扩容后的topic分区迁移的相关文章

kafka集群扩容以及数据迁移

一 kafka集群扩容比较简单,机器配置一样的前提下只需要把配置文件里的brokerid改一个新的启动起来就可以.比较需要注意的是如果公司内网dns更改的不是很及时的话,需要给原有的旧机器加上新服务器的host,不然可能会产生controller服务器从zk上拿到域名但是解析不到新机器地址的情况. 二 集群扩容后数据是不会自动均衡到新机器上的,需要采用kafka-reassign-partitions.sh这个工具脚本.脚本可以工作在三种模式--generate,--execute,--veri

Kafka集群扩容遇到的问题

首先,看一下遇到的问题: Partitions reassignment failed due to Partition reassignment data file imp-imps-app-web.json is empty kafka.common.AdminCommandFailedException: Partition reassignment data file imp-imps-app-web.json is empty at kafka.admin.ReassignPartit

Kafka 进行机器扩容后的副本再平衡 和 为已有分区增加 replica 实践

今天是继续对之前 kafka 集群遗留问题的查漏补缺. 扩容后对副本进行再平衡: 今天检查 kafka manager 发现了一个 __consumer_offsets 主题(消费者分区位移保存主题)的 leader 副本只被部署在了已有三节点中的两个节点上.并没有将三个 broker 上都平均分布上副本,具体表现为 我们点开这个主题 可以发现原本是三个节点的我们,却非常不均匀的只有两个节点承担了存放该 partition 的任务. 所以我们需要重新非配这个 topic 的副本均匀的到三个节点上

kafka集群安装

集群安装1.解压2.修改server.propertiesbroker.id=1zookeeper.connect=work01:2181,work02:2181,work03:2181 3.将zookeeper集群启动 4.在每一台节点上启动brokerbin/kafka-server-start.sh config/server.properties 5.在kafka集群中创建一个topicbin/kafka-topics.sh --create --zookeeper work01:218

一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

1:KafKa的官方网址:http://kafka.apache.org/ 开发流程图,如: 2:KafKa的基础知识: 2.1:kafka是一个分布式的消息缓存系统2.2:kafka集群中的服务器都叫做broker2.3:kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接2.4:kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载2.

Linux下kafka集群搭建过程记录

环境准备 zookeeper集群环境kafka是依赖于zookeeper注册中心的一款分布式消息对列,所以需要有zookeeper单机或者集群环境. 三台服务器: 172.16.18.198 k8s-n1 172.16.18.199 k8s-n2 172.16.18.200 k8s-n3 下载kafka安装包 http://kafka.apache.org/downloads 中下载,目前最新版本的kafka已经到2.2.0,我这里之前下载的是kafka_2.11-2.2.0.tgz. 安装ka

Kafka集群安装与扩容

介绍略 集群安装: 一.准备工作: 1.版本介绍: 目前我们使用版本为kafka_2.9.2-0.8.1(scala-2.9.2为kafka官方推荐版本,此外还有2.8.2和2.10.2可以选择) 2.环境准备: 安装JDK6,目前使用版本为1.6,并配置JAVA_HOME 3.配置修改: 1)拷贝线上配置到本地kafka目录. 2)需要注意的是server.properties里broker和ip的指定,必须要唯一. 3)server.properties中log.dirs必须要手动指定.此配

kafka集群精华之-----安装配置、扩容、监控

kafka集群细节支出折磨我死去活来,查看众多文档进度缓慢,内容重复,所以站在大佬的肩膀上 整理文档记录它. kafka说明: 一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),,此外kafka还可以配置partitions需要备份的个数(replicas).有多少个partitions就意味着有多少个"leader",kafka会将"leader"均衡的分散在每个实例上,来确保整体的性能稳定. kafka是通过zookeeper

Ubuntu16.04安装Kafka集群

下载 http://kafka.apache.org/downloads.html http://mirror.bit.edu.cn/apache/kafka/0.11.0.0/kafka_2.11-0.11.0.0.tgz [email protected]:/usr/local/kafka_2.11-0.11.0.0/config# vim server.properties broker.id=2            每个节点不同 log.retention.hours=168 mess