今天主要讲下 qbus 落地到hdfs的组件–flume,的容器化过程,希望能给在座的有把服务迁移到容器的各位,提供一个解决方案,可能不是最好,但是它很真实。
flume 在qbus 服务中作用:
消费各个业务的topic数据,持久化到hdfs。
hulk流程
- user 通过 hulk 开通落地到hdfs服务,hulk脚本把相关配置存在zookeeper中。
- 本地脚本cron遍历读取zk配置(每个机器消费集群维护一个cluster_list)
- 机器本地起flume进程消费,写hdfs。
服务痛点:
可用性
- hdfs集群割接断网
- flume机器down机
- 某些topic量过于大
配额/负载均衡
- 业务短时间内开启多个进程
运维成本
多处配置文件维护(cluster.conf,burrow.list)
手动进程增添,跨机器之后配置不统一
进程存在哪台机器,未知
最初运维改善
可用性监控
运维工具编写
配置批量增删改查工具
机器整体迁移工具
思考-容器能为我们带来什么?
可用性更强
hulk容器有保活功能。挂掉自动拉起资源配比均衡
不用考虑机器上进程超载状况增添副本更加方便
有接口,可以直接操作运维成本更低
迁移,更改配置更加方便
而且各进程之间没有什么数据同步,基本无状态,非常适合容器场景。
容器化面对的问题
如何实现以下问题
hdfs授权
配置
监控
动态调整
无痛迁移
最终实现
自动授权
- [x]系统部配合出授权接口
- 我们自己用golang包成工具,嵌入到容器中,每次容器启动的时候自动授权
配置存取
- 从zookeeper迁移到qcm, 制定新的配置模板,由hulk写入到qcm配置中心
- 从zookeeper迁移到qcm, 制定新的配置模板,由hulk写入到qcm配置中心
* [x] 容器读取qcm http接口
监控
-
容器主进程自动check服务进程
-
根据topic流量和lag情况进行副本动态调整
-
每次调整之后的结果,包括pod_num,lag情况,partition数量都记录在数据库中,做到有据可查,也能及时发现异常情况
-
* [x] 设置黑名单功能,对异常业务进行隔离
- hulk用户无缝迁移
- 使用相同consumer group
- hulk 开发配合特征识别新老版本进程(新建走新流程)
总结
其实在这个过程当中工作量具体分配如下:
content | 工作量/时间 占比 |
---|---|
发现问题 | 10% |
提出方案 | 10% |
沟通/跨部门沟通 | 30% |
优化/确定方案 | 10% |
上线 | 30% |
后续问题处理 | 10% |
所以沟通尤其跨部门沟通也是技术活儿,
ToDo:
- 授权优化
- 不同特征topic配置优化