kafka集群维护
- 1、集群信息实时查看工具(topic工具)
- 2、kafka集群leader平衡机制
- 3、集群分区日志迁移
1、集群信息实时查看工具(topic工具)
(1)列出集群当前所有可用的topic
kafka-topics.sh --list --zookeeper kafka1:2181
(2)查看集群特定的topic信息
/bin/kafka-topics.sh --describe --zookeeper 192.168.12.150:2181 --topic test-topic
(3)创建topic
bin/kafka-topics.sh --create --zookeeper kafka1:2181 --replication-factor 3 --partitions 1 --topic Multibrokerapplication
(4)增加(不能减少)分区(最后的4表示增加后的值)–提高并发度
bin/kafka-topics.sh --zookeeper kafka1:2181 --alter --topic test-topic --partitions 4
2、kafka集群leader平衡机制
每一个partition的所有replicas副本叫做“assinged replicas”分配备份,分配副本中的第一个replicas叫做“preferred replica”偏爱备份,刚创建的topic一般偏爱副本是leader。
集群leader平衡
如果偏爱分区不是leader的情况可以操作如下(手动)
bin/kafka-preferred-replica-election.sh --zookeeper kafka1:2181
自动设置偏爱分区是否是leader,如果不是则动态运行以上命令
auto.leader.rebalance.enable=true
3、集群分区日志迁移
如果最开始的集群的机器只有10台,新增加4台机器,此时想把之前10台上的数据迁移到新增加的四台上,比如迁移某个topic或者迁移某个topic的某个分区到新增加的机器上,需要用到集群分区,日志迁移工具
1、迁移整个topic数据到其他的broker上,遵循如下四个步骤:
(1)编写json文件topics-to-move.json,文件格式如下
{
"topics":[{"topic": "foo1"}, {"topic":"foo2"}],
"version":1
}
(2)使用–generate生成迁移计划
如下操作是将topic: foo1和foo2移动到broker5和broker6中bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topic-to-move-json-file topics-to-move.json --broker-list "5,6" --generate
这一步仅仅是生成计划,斌没有执行数据迁移(指定迁移配置文件和指定迁移的broker列表),控制台将打印当前分区计划和新的分区计划。
将生成的计划保存到expand-cluster-reassignment.json中。
(3)使用–execute执行计划
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --execute
执行前最好保存当前的分配情况,以防止出错回滚!
(4)使用–verrify验证是否已经迁移完成
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --verify
(5)最后查看某个topic的分配情况
bin/kafka-topic --describe --zookeeper localhost:2181 --topic foo1
2、迁移某个topic的某些特定的partition数据到其他broker,步骤与上面一样
只需更改迁移配置文件即可,这里使用custom-reassignment.json配置文件
vim custom-reassignment.json
修改内容
{
"version": 1,
"partitions":[{"topic": "foo1", "partition": 0, "replicas": [5, 6]}, {"topic": "foo2", "partition": 1, "replicas": [2, 3]} ]
}
将foo1主题的0分区,迁移到5,6上,foo2主题的1分区迁移到2,3上
3、注意问题
kafka-reassign-partitions.sh工具会复制磁盘上的日志文件,只有当完全复制完成才会删除迁移前磁盘上的日志文件。执行分区日志迁移需要注意:
(1)kafka-reassign-partitions.sh工具的粒度只能到broker,不能到broker的目录(如果broker配置了多个目录,是按照磁盘上面已驻留的分区数来均匀分配的),所以如果topic之间的数据,或者topic的partition之间的数据本身就不均匀,很可能造成磁盘数据的不均匀。
(2)对于分区数据较多的分区迁移数据会花大量时间,所以建议在topic数据量较少或磁盘有效数据较少的情况下执行数据迁移操作
(3)进行分区迁移时最好保留一个分区在原来的磁盘,这样不会影响正常的消费和生产,如果目的是将分区5(broker1,5,leader为1,作为主轴)迁移到broker2,3.可以先将5迁移到2,1(1没有变,还是leader,服务器5上数据到了2上,1上的数据没有变),最后在迁移1的5分区 到2,3(然后将2作为leader,2不变1迁移到3),。而不是一次将1,5迁移到2,3(因为此时可能有生产和消费者在生产和消费).因为一次迁移所有的副本,无法正常消费和生产,部分迁移则可以正常消费和生产。