介绍略
集群安装:
一.准备工作:
1.版本介绍:
目前我们使用版本为kafka_2.9.2-0.8.1(scala-2.9.2为kafka官方推荐版本,此外还有2.8.2和2.10.2可以选择)
2.环境准备:
安装JDK6,目前使用版本为1.6,并配置JAVA_HOME
3.配置修改:
1)拷贝线上配置到本地kafka目录。
2)需要注意的是server.properties里broker和ip的指定,必须要唯一。
3)server.properties中log.dirs必须要手动指定。此配置项是kafka接收日志的存储目录(目前我们保存7天数据log.retention.hours=168)
4)zookeeper的指定可以是下面这种形式,手动定制zookeeper的目录,并且用逗号分隔ip
zookeeper.connect=1.1.1.1:2181,1.1.1.2:2181,1.1.1.3:2181/kafka-0.8.1
5)默认分区和备份数分别为10和3(num.partitions=10 / default.replication.factor=3)当然这也可以在创建topic时手动指定。
详细配置介绍项请看链接:kafka配置
4.部署:
目前kafka统一安装在/opt/apps_install/下。
JMX_PORT=9997 bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &
部署新节点,然后通过命令启动kafka,JMX_PORT是为了打开kafka的可管理端口(默认不启用)。
5.命令:
6.扩容:
1)先部署好新节点环境,并根据上文"配置修改"修改配置,然后启动集群,确保新节点为可用状态。
2)“高级命令“的Expanding your cluster小节介绍了扩容的基本方法:
生成扩容使用的json文件:
cat topics-to-move.json
{"topics": [{"topic": "topic1"}], //加粗部分是要手动指定的topic名称
"version":1
}
通过上一步写好的json文件,使用kafka命令生成数据迁移配置
bin/kafka-reassign-partitions.sh --topics-to-move-json-file topics-to-move.json --zookeeper 1.1.1.99:2181/kafka-0.8.1 --broker-list "0,1,2,3,4" --generate //加粗部分是指定数据迁移到那些broker。
将第一部分保存留作回退备份(即Proposed partition reassignment configuration上面的json串),下面json串为扩容将要使用的到的配置,将其保存为expand-cluster-reassignment.json
执行扩容命令: bin/kafka-reassign-partitions.sh --zookeeper 1.1.1.99:2181/kafka-0.8.1 --reassignment-json-file expand-cluster-reassignment.json --execute 正常执行的话会生成同上图类似的json串,表示原始状态和目标状态
查询执行状态: bin/kafka-reassign-partitions.sh --zookeeper 1.1.1.99:2181/kafka-0.8.1 --reassignment-json-file expand-cluster-reassignment.json --verify 正常执行后会返回当前数据迁移的不用partion的,信息状态类似下面
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"。
另外数据迁移也可以通过手工定制。
原文:http://my.oschina.net/MaTech/blog/292090