Kafka集群管理(内部)
需求规格说明书
编写:xxx
评审:XXX
批准:XXX
日期:2015-03-13
文档信息及修改历史
项目名称 | Kafka集群管理(内部)设计文档 | ||||
文档编号 | 文档密级 | 机密/秘密/内部/公开 | |||
版本号 | 修改日期 | 编写 | 评审 | 批准 | 修改内容 |
1、文档密级是该文档允许扩散的范围。
2、版本号是指该文档的版本次序号,该文档首次发布时可确定为1.0,如果在上一版的基础上有细微的调整和修改,则可在小数点后次版本号加1;如果该文档内容总体上有重大变化或增加/删除了重要章节,则小数点主版本号加1。
1引言
1.1编写目的
本文档制定使用kafka集群的管理维护要求,解决因无规则操作而引起kafka集群的稳定性,制定规范命名和流程化的使用规则,从而降低后期维护、扩容、管理的成本。
1.2编写原则
根据内部项目管理规范则,从业务人员的角度对需求的阐述,以及对需求描述的细化程度。此文档将在开发过程随着需求的变更而更改和修订。
1.3读者对象
项目经理、开发人员、业务人员、测试人员。
1.4需求来源
中间件团队。
1.5术语定义
1.5.1名词释义
术语 | 解释 |
Kafka | Apache kafka,高吞吐量的分布式消息系统 |
2.1Kafka集群排错
在不借助任何工具的情况下,对kafka集群进行排错。(此方法快速有效)
2.1.1整体排错
运行
bin/kafka-topics.sh --describe --zookeeper 172.17.162.235:2181
Isr:活着的broker节点
Leader:使用的broker节点
查看isr,如果所有broker集群包含在里面,并且Leader都有相应的broker,则认为集群正常,
否则缺什么集群就单独进行排错。
2.1.2消费延迟排错
当发现消费延迟时运行
pid offset:为当前消费组的每个分区的消费偏移量
logSize: 为当前的日志大小。
Lag:延迟消费数量。
解决:当发现此分区消费延迟过高,就可以通过命令进行进行平衡。
>bin/kafka-preferred-replica-election.sh --zookeeper 172.17.162.235:2181
Successfully started preferred replica election for partitions Set([test,1], [test,0])
2.1.3日志
logs/server.log:为服务器运行日志。
logs/ kafkaServer-gc.log:为服务器运行日志。
2.2kafka集群搭建参数配置
此配置是在搭建kafka环境之前进行修改的。
字段名 | 默认 | 描述 |
num.partitions | 待定 | 默认创建分区数,跟业务集群数对等。 |
log.retention.{ms,minutes,hours} | 7day | 在删除log文件之前,保存在磁盘的时间, |
log.retention.bytes | -1 | topic每个分区的最大文件大小,达到要求则执行删除。 |
auto.create.topics.enable | False | 是否允许自动创建topic。(我们来管理topic,所有是禁止自动创建的。) |
offsets.topic.num.partitions | 100 | 偏移的提交topic的分区数目。 由于目前不支持部署之后改变,我们建议您使用生产较高的设置(例如,100-200)。 |
auto.leader.rebalance.enable | True | 每当一个broker停止或崩溃,broke转移到其他的副本。在默认情况下,当这个broker重新启动,它也只会跟随它的所有分区。并不会用于客户端的读和写。自动平衡 |
更多配置需要等待kafka集群测试报告后,在新增加进去。
2.3Kafka迁移
如果集群新增机器5,6,部分集群机器的topic要进行迁移到新的broker节点上去。
例:新增broker节点5,6,原有数据要迁移到5,6上去。
2.3.1创建迁移脚本
创建要进行迁移的topic
cat topics-to-move.json
{"topics": [{"topic": "foo1"},
"version":1
}
2.3.2生成迁移规则
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":[{"topifoo1
{"topifoo1
{"topifoo2
{"topifoo2
{"topifoo1
{"topifoo2
}
Proposed partition reassignment configuration
{"version":1,
"partitions":[{"topifoo1
{"topifoo1
{"topifoo2
{"topifoo2
{"topifoo1
{"topifoo2
新建expand-cluster-reassignment.json,复制生成的规则放到文件中。
2.3.3执行
确认无误后,开始执行。
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file expand-cluster-reassignment.json --execute
Current partition replica assignment
{"version":1,
"partitions":[{"topifoo1
{"topifoo1
{"topifoo2
{"topifoo2
{"topifoo1
{"topifoo2
}
Save this to use as the --reassignment-json-file option during rollback
Successfully started reassignment of partitions
{"version":1,
"partitions":[{"topifoo1
{"topifoo1
{"topifoo2
{"topifoo2
{"topifoo1
{"topifoo2
}
、
2.3.4验证迁移结果
> 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
数据迁移一旦开始无法停止,也不要强行停止集群,这样会造成数据不一致,带来无法挽回的后果。
注 意:kafka数据迁移的原理是先拷贝数据到目标节点,然后再删除原节点的数据。这样的话如果集群原节点空间不足,不要继续指定其为迁移broker,这 样将造成原节点空间用尽,例如原节点是broker为0,1,2,3,4就不要这样指定 --broker-list "0,1,2,3,4",应该这样 --broker-list "5,6"
、
2.4Kafka topic管理
2.4.1创建topic
>bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
由运维人员对开发人员申请的kafka新建topic主题进行统一管理,统一命名。
创建的kafka主题分区数和副本数不得超过集群本身,根据实际业务场景进行创建。
副本数最好一主一备,超过则影响性能。
2.4.2Topic新增分区
新增分区
>bin/kafka-topics.sh --zookeeper 172.17.162.235:2181 --alter --topic test --partitions 2
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!
注意:新增分区不得超过服务器集群数。
2.4.3删除topic
Kafka删除
> bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper 172.17.162.236:2181 --topic test
注意:因为目前线上版本为2.8.0-0.8.1.1,只是从kafka集群中删除topic,而持久层数据并没有移除。请勿在次创建删除过的topic名称。
(此操作是必须申请,否者是不允许操作)