之前阅读了Kafka的基本概念和关于Replica的文档,现在已是晕晕乎乎。在这大好的清晨微风徐徐中,继续阅读关于Kafka集群镜像的内容。
(Kafka版本:0.8.2.1)
Kafka集群镜像
Kafka的集群镜像与Replica不同。Replica作用在单个集群中不同的节点之间;而建立集群镜像在不同的Kafka集群之间发生作用。在集群镜像的过程中,源数据来自于一个或多个不同的Kafka集群,然后数据流向一个目标集群:
Kafka提供了专用的工具实现创建集群镜像。
这个操作的一个用途之一是创建数据中心的备份。但在严格意义上讲,它不完全是“备份”。因为创建后的镜像与源集群在partition数量、offset方面都会有所不同。但由于其使用的message key仍然不变并且也是通过Consumer的方式读取数据的,所以其顺序仍然相同。
扩展Kafka集群
添加新broker:为新的broker分配一个唯一id,然后在新的服务器上启动Kafka即可。
做到这一步完成新broker的添加,但它只有在创建新的topic时才会参与工作。除非将已有的partition迁移到新的服务器上面。
迁移数据到新broker:迁移数据只能手动执行,但整个过程是自动完成的。Kafka先将新的Server设置为要迁移的partition的follower,让它进行replica。等它将目标partition的数据完全复制,且这个新的server已经进入in sync的列表后,已有的一个replica就会删除自己的partition数据。
Kafka提供kafka-reassign-partitions.sh工具做添加新broker后的数据迁移。
kafka-reassign-partitions.sh 使用方法
本文记录下笔者的尝试过程,详细的文档说明可以在这里找到:kafka-reassign-partitions.sh
依据官方的文档,kafka-reassign-partitions.sh是用来重新分配partition和replica到broker上的工具。简单实现重新分配需要三步:
- 生成分配计划(generate)
- 执行分配(execute)
- 检查分配的状态(verify)
在我原有的集群中,只有一个broker,broker.id = 0;现在我添加了一个broker到集群中,broker.id = 1。下面记录如何对原有的partition进行重新分配。
添加broker很简单,只需要在新的机器上拷贝一份新的server.properties,然后改一个新的broker.id,启动即可。
- 生成分配计划
./bin/kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181 --topics-to-move-json-file topics-to-move.json --broker-list "1" --generate
其中,topic-to-move.json 是事先自己写好的一个json文件,里面包含要进行迁移的topic。例如我用来实验的是这样:
{"topics":
[{"topic":"test"}],
"version": 1
}
用 kafka-topics.sh 工