【Kafka-分区增加副本】Kafka分区增加副本
1)前言
Kafka 中 topic 的每个分区可以设置多个副本。如果副本数为1,当该分区副本的 leader 节点宕机后,会导致该分区不可用。故需要设置多副本来保证可用性。
实际项目中,存在项目初期创建了副本数为1的 topic,但是后期又需要扩大副本数的场景。通常不能直接删除 topic 重建,可以通过如下操作实现。
2)创建测试topic
(1)创建副本为1的 topic:
kafka-topics --bootstrap-server kafka01:9092 --create --replication-factor 1 --partitions 3 --topic test_topic
(2)查看topic信息:
kafka-topics --describe --bootstrap-server kafka01:9092 --topic test_topic
输出(可以看出3个分区,各自都是只有一个副本。当 leader 对应节点挂掉后,分区就不可用了):
Topic:test_topic PartitionCount:3 ReplicationFactor:1 Configs:
Topic: test_topic Partition: 0 Leader: 364 Replicas: 364 Isr: 364
Topic: test_topic Partition: 1 Leader: 365 Replicas: 365 Isr: 365
Topic: test_topic Partition: 2 Leader: 366 Replicas: 366 Isr: 366
3)增加副本
使用官方自带的kafka-reassign-partitions.sh
脚本实现。该脚本用来移动分区的副本位置。除了可以实现增加副本,还可以实现将分区的副本移动到指定机器上。该脚本的 help 见附录。
以下步骤实现将 test_topic 的各个分区增加为三副本。
(1)制定分区及副本分配策略:
创建 json 文件,写入如下内容:
填写说明:
- topic 为 topic 名称
- partition 为分区号
- replicas 为 broker id 的数组
{
"version": 1,
"partitions": [
{
"topic": "test_topic",
"partition": 0,
"replicas": [
364,
365,
366
]
},
{
"topic": "test_topic",
"partition": 1,
"replicas": [