在全链路分析中,使用了storm进行流式分析,本文主要介绍storm集群环境的升级流程。
背景声明
我们的storm集群,数据主要来源于kafka,而部门的kafka集群从版本0.8.* 升级到了 0.11已经有一段时间了。从kafka-0.9之后的版本,kafka陆续提供了许多新的功能,例如,新的消费者API、消费者不依赖于Zookeeper、消息压缩等等。所以业务系统中大部分的kafka 生产者和消费者,都一并进行了升级。
而我们的在线storm集群,一直使用的版本是 1.0.2,这个版本的storm消费kafka消息依然使用老方式,即需要依赖Zookeeper得到broker地址,并且offset也是保存到Zookeeper上,这就导致了新老版本消费者并存的情况。
新老版本并存,有时会有一些问题,例如无法启用kakfa的消息压缩功能等。为了保持kafka消费者版本的一致性,故计划对storm集群进行升级。
storm 从1.0.6版本后,开始支持新的消费者API,而目前最新的release版本是 1.2.2,所以我们决定采用1.2.2版本。storm 从1.0.2升级到1.2.2,需要升级两个部分:
storm集群环境升级;
业务代码升级(主要涉及kafka消费代码);
Storm集群环境升级
由于storm主要用于流式计算,本身并不存储数据,可以将其理解为是无状态的,所以有两种升级方案可以参考:
(1)如果机器富裕,新搭建一套集群,然后把业务迁过去就行了;
(2)原有机器上升级。
我们机器资源并不充裕,所以选择的方案是在原有机器上升级storm集群,这种方法其实更简单、方便。在升级前,我们先回顾下storm集群的搭建过程(1.*版本的搭建、配置基本相同)。
storm集群的搭建过程
步骤1:规划
在x.x.x.210、x.x.x.213、x.x.x.214 三台机器上部署storm集群,相关zookeeper、nimbus和supervisor、UI规划如下:
注:在storm0.10.x以后,storm集群可以支持多个nimbus节点,实现了高可用,其中有一个为leader,负责调度。
为了便于后续维护管理,规划host 配置
步骤2:搭建准备
3台机器安装JDK + Python,我们这里用的是JDK8 和 Python2.7
步骤3:修改3台机器的hosts
配置以下内容:
步骤4:ZooKeeper搭建
分别在3台机器上部署zookeeper,组成zookeeper集群,具体安装忽略。
步骤5:下载解压storm到指定目录
步骤6:调整storm配置文件
分别调整3台机器上的storm配置文件 conf/storm.yaml
说明
配置项
说明
步骤7:启动
进入apache-storm-1.*/bin 中
机器
配置项
说明
集群搭建完成,通过UI 就可以看到storm集群情况了。
微调结构,便于后续维护
步骤1
为了后续升级方便,在home下新建 storm文件夹,并通过软连接,指向storm工程,效果:
步骤2
新建 /home/stormInstance/ ,用于启动storm集群,共包括4个文件夹及文件
文件夹
功能
storm.sh脚本内容:
步骤3
调整后的集群启动方式
进入 /home/stormInstance/bin ,通过命令启动nimbus、supervisor 、ui :
至此,调整完成,后续配置、集群集群,都不在原始的 /home/apache-storm-1.0.2 目录中,而是在新建的 /home/stormInstance 中;
storm集群从1.0.2升级到1.2.2
步骤1:下载解压1.2.2到 /home
步骤2:更新/home/storm 软连接地址
删除旧的软连接:
新建 新的软连接:
效果:
领取专属 10元无门槛券
私享最新 技术干货