kafka 添加节点或者删除节点

扩展您的群集

将服务器添加到Kafka集群很简单,只需为它们分配一个唯一的代理ID并在新服务器上启动Kafka即可。但是,这些新服务器不会自动分配任何数据分区,因此除非将分区移动到它们,否则在创建新主题之前它们不会执行任何工作。因此,通常在将计算机添加到群集时,您需要将一些现有数据迁移到这些计算机。

迁移数据的过程是手动启动的,但完全自动化。发生的事情是,Kafka将添加新服务器作为其正在迁移的分区的跟随者,并允许它完全复制该分区中的现有数据。当新服务器完全复制此分区的内容并加入同步副本时,其中一个现有副本将删除其分区的数据。

分区重新分配工具可用于跨代理移动分区。理想的分区分布将确保所有代理的均匀数据负载和分区大小。分区重新分配工具无法自动研究Kafka群集中的数据分布并移动分区以实现均匀的负载分配。因此,管理员必须弄清楚应该移动哪些主题或分区。

分区重新分配工具可以以3种互斥模式运行:

  • --generate:在此模式下,给定主题列表和代理列表,该工具会生成候选重新​​分配,以将指定主题的所有分区移动到新代理。此选项仅提供了一种方便的方法,可在给定主题和目标代理列表的情况下生成分区重新分配计划。
  • --execute:在此模式下,该工具根据用户提供的重新分配计划启动分区的重新分配。(使用--reassignment-json-file选项)。这可以是由管理员手工制作的自定义重新分配计划,也可以使用--generate选项提供
  • --verify:在此模式下,该工具将验证最后一次--execute期间列出的所有分区的重新分配状态。状态可以是成功完成,失败或正在进行中

自动将数据迁移到新计算机

分区重新分配工具可用于将一些主题从当前的代理集移动到新添加的代理。这在扩展现有集群时通常很有用,因为将整个主题移动到新的代理集更容易,而不是一次移动一个分区。当用于执行此操作时,用户应提供应移动到新的代理集的主题列表和新代理的目标列表。然后,该工具在新的代理集中均匀分配给定主题列表的所有分区。在此移动期间,主题的复制因子保持不变。有效地,输入主题列表的所有分区的副本将从旧的代理集移动到新添加的代理。

例如,以下示例将主题foo1,foo2的所有分区移动到新的代理集5,6。在此移动结束时,主题foo1和foo2的所有分区将仅存在于代理5,6上。

由于该工具接受主题的输入列表作为json文件,因此首先需要确定要移动的主题并创建json文件,如下所示:

1

2

3

4

> cat topics-to-move.json

{"topics": [{"topic": "foo1"},

            {"topic": "foo2"}],

"version":1

}

准备好json文件后,使用分区重新分配工具生成候选分配:

1

2

3

4

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

> bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file topics-to-move.json --broker-list "5,6" --generate

Current partition replica assignment

 

{"version":1,

"partitions":[{"topic":"foo1","partition":2,"replicas":[1,2]},

              {"topic":"foo1","partition":0,"replicas":[3,4]},

              {"topic":"foo2","partition":2,"replicas":[1,2]},

              {"topic":"foo2","partition":0,"replicas":[3,4]},

              {"topic":"foo1","partition":1,"replicas":[2,3]},

              {"topic":"foo2","partition":1,"replicas":[2,3]}]

}

 

Proposed partition reassignment configuration

 

{"version":1,

"partitions":[{"topic":"foo1","partition":2,"replicas":[5,6]},

              {"topic":"foo1","partition":0,"replicas":[5,6]},

              {"topic":"foo2","partition":2,"replicas":[5,6]},

              {"topic":"foo2","partition":0,"replicas":[5,6]},

              {"topic":"foo1","partition":1,"replicas":[5,6]},

              {"topic":"foo2","partition":1,"replicas":[5,6]}]

}

该工具生成一个候选分配,将所有分区从主题foo1,foo2移动到代理5,6。但请注意,此时分区移动尚未开始,它只是告诉您当前的分配和建议的新分配。应保存当前分配,以防您想要回滚它。新的赋值应保存在json文件中(例如expand-cluster-reassignment.json),以使用--execute选项输入到工具,如下所示:

1

2

3

4

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

> bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --execute

Current partition replica assignment

 

{"version":1,

"partitions":[{"topic":"foo1","partition":2,"replicas":[1,2]},

              {"topic":"foo1","partition":0,"replicas":[3,4]},

              {"topic":"foo2","partition":2,"replicas":[1,2]},

              {"topic":"foo2","partition":0,"replicas":[3,4]},

              {"topic":"foo1","partition":1,"replicas":[2,3]},

              {"topic":"foo2","partition":1,"replicas":[2,3]}]

}

 

Save this to use as the --reassignment-json-file option during rollback

Successfully started reassignment of partitions

{"version":1,

"partitions":[{"topic":"foo1","partition":2,"replicas":[5,6]},

              {"topic":"foo1","partition":0,"replicas":[5,6]},

              {"topic":"foo2","partition":2,"replicas":[5,6]},

              {"topic":"foo2","partition":0,"replicas":[5,6]},

              {"topic":"foo1","partition":1,"replicas":[5,6]},

              {"topic":"foo2","partition":1,"replicas":[5,6]}]

}

最后,--verify选项可与该工具一起使用,以检查分区重新分配的状态。请注意,相同的expand-cluster-reassignment.json(与--execute选项一起使用)应与--verify选项一起使用:

1

2

3

4

6

7

8

> bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --verify

Status of partition reassignment:

Reassignment of partition [foo1,0] completed successfully

Reassignment of partition [foo1,1] is in progress

Reassignment of partition [foo1,2] is in progress

Reassignment of partition [foo2,0] completed successfully

Reassignment of partition [foo2,1] completed successfully

Reassignment of partition [foo2,2] completed successfully

猜你喜欢

转载自blog.csdn.net/a53878617/article/details/84952502