kafka集群管理内部.docx
《kafka集群管理内部.docx》由会员分享,可在线阅读,更多相关《kafka集群管理内部.docx(7页珍藏版)》请在冰豆网上搜索。
kafka集群管理内部
翼支付
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
Apachekafka,高吞吐量的分布式消息系统
2操作
2.1Kafka集群排错
在不借助任何工具的情况下,对kafka集群进行排错。
(此方法快速有效)
2.1.1整体排错
运行
bin/kafka-topics.sh--describe--zookeeper172.17.162.235:
2181
Isr:
活着的broker节点
Leader:
使用的broker节点
查看isr,如果所有broker集群包含在里面,并且Leader都有相应的broker,则认为集群正常,
否则缺什么集群就单独进行排错。
2.1.2消费延迟排错
当发现消费延迟时运行
pidoffset:
为当前消费组的每个分区的消费偏移量
logSize:
为当前的日志大小。
Lag:
延迟消费数量。
解决:
当发现此分区消费延迟过高,就可以通过命令进行进行平衡。
>bin/kafka-preferred-replica-election.sh--zookeeper172.17.162.235:
2181
SuccessfullystartedpreferredreplicaelectionforpartitionsSet([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
cattopics-to-move.json
{"topics":
[{"topic":
"foo1"},
{"topic":
"foo2"}],
"version":
1
}
2.3.2生成迁移规则
bin/kafka-reassign-partitions.sh--zookeeperlocalhost:
2181--topics-to-move-json-filetopics-to-move.json--broker-list"5,6"--generate
Currentpartitionreplicaassignment
{"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]}]
}
Proposedpartitionreassignmentconfiguration
{"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]}]
新建expand-cluster-reassignment.json,复制生成的规则放到文件中。
2.3.3执行
确认无误后,开始执行。
bin/kafka-reassign-partitions.sh--zookeeperlocalhost:
2181--reassignment-json-fileexpand-cluster-reassignment.json--execute
Currentpartitionreplicaassignment
{"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]}]
}
Savethistouseasthe--reassignment-json-fileoptionduringrollback
Successfullystartedreassignmentofpartitions
{"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]}]
}
、
2.3.4验证迁移结果
>bin/kafka-reassign-partitions.sh--zookeeperlocalhost:
2181--reassignment-json-fileexpand-cluster-reassignment.json--verify
Statusofpartitionreassignment:
Reassignmentofpartition[foo1,0]completedsuccessfully
Reassignmentofpartition[foo1,1]isinprogress
Reassignmentofpartition[foo1,2]isinprogress
Reassignmentofpartition[foo2,0]completedsuccessfully
Reassignmentofpartition[foo2,1]completedsuccessfully
Reassignmentofpartition[foo2,2]completedsuccessfully
数据迁移一旦开始无法停止,也不要强行停止集群,这样会造成数据不一致,带来无法挽回的后果。
注意:
kafka数据迁移的原理是先拷贝数据到目标节点,然后再删除原节点的数据。
这样的话如果集群原节点空间不足,不要继续指定其为迁移broker,这样将造成原节点空间用尽,例如原节点是broker为0,1,2,3,4就不要这样指定--broker-list"0,1,2,3,4",应该这样--broker-list"5,6"
、
2.4Kafkatopic管理
2.4.1创建topic
>bin/kafka-topics.sh--create--zookeeperlocalhost:
2181--replication-factor1--partitions1--topictest
由运维人员对开发人员申请的kafka新建topic主题进行统一管理,统一命名。
创建的kafka主题分区数和副本数不得超过集群本身,根据实际业务场景进行创建。
副本数最好一主一备,超过则影响性能。
2.4.2Topic新增分区
新增分区
>bin/kafka-topics.s