Kafka 运维手册
编制 |
架构设计部 伍超 |
审核 |
|
批准 |
|
1.编写说明
以下是LinkedIn在生产中使用kafka集群的一些经验和信息,基于kafka0.9.0版本官方文档翻译。;
2.基本运维
这个章节将说明在运维kafka集群时最常见的操作,所提到的工具都位于kafka安装路径下的bin/目录,每个工具会打印详细使用信息如果没有指定参数。
2.1新增/删除topics
你可以手动新增或利用程序自动创建不存在的topics,如果是自动创建,你可以在broker配置文件server.properties里调整topic的相关默认参数。
通过工具新增或修改topics:
>bin/kafka-topics.sh --zookeeper zkhost:port --create --topic topicname --partitions 6 --replication-factor 3 --config x=y |
参数replication-factor控制写入的信息会复制到多少个broker中。如果该参数设置为3,在可以正常访问数据的前提下将允许最多2个broker挂掉。通常建议使用2或3副本,这样可以提高系统的可用性。
参数partitions控制topic可以划分为多少个分区,每个分区只对应一个broker,分区的个数也影响着可以同时进行消费的消费者个数,每个分区只能被同一个消费者组内的其中一个消费者消费,但可以被不同消费者组内的消费者同时消费。
工具指定的配置参数在运行时会覆盖配置文件里对应的配置参数。
2.2修改topics
你可以通过工具修改一个topic的配置或分区数量。
新增分区数量:
>bin/kafka-topics.sh –zookeeper zkhost:port –alter –topic topicname –partitions 6 |
注意partition作用之一是划分数据,新增partitions不会改变集群中已经存在的数据的原有分区。也就是如果数据以hash(key)%number-of-partitions的方式分配,那新收到的数据可能会被分配到新的分区,但kafka不会自动重新分配已存在的数据。
新增配置
>bin/kafka-topics.sh –zookeeper zkhost:port –alter –topic topicname –config x=y |
移除配置
>bin/kafka-topics.sh –zookeeper zkhost:port –alter –topic topicname –delete-config x |
最后删除topic
>bin/kafka-topics.sh –zookeeper zkhost:port –delete –topic topicname |
Topic删除选项默认是关闭的,通过设置broker配置参数delete.topic.enable=true来开启
Kafka目前还不支持削减topic的partitions的数目。
2.3优雅的关闭
Kafka集群会自动检测是否有broker宕机或服务挂了,并为相关的partitions选取新的leader。Kafka支持一种更优雅的关闭服务机制而不是强制杀死它。当服务优雅的关闭时会有两个好处:
1. 首先,它会同步所有的数据到磁盘而不需要再重启的时候去恢复数据,数据恢复会耗费更多的时间;
2. 其次,他会在服务关闭前将leader partitions迁移到其他副本。这样使leader partitions选取的更快从而减小了partition不可用的时间。
当服务停止而不是强制杀死服务的时候,自动同步数据到磁盘会自动进行,但是leader的迁移需要broke