1.1 为什么须要KisFlow
一些大型toB企业级的我的项目,须要大量的业务数据,少数的数据须要流式实时计算的能力,然而很多公司还不足以承当一个数仓相似,Flink + Hadoop/HBase 等等。 然而业务数据的实时计算需要仍然存在,所以大多数的企业仍然会让业务工程师来消化这些业务数据计算的工作。
而这样只能间接查问业务数据库,这样会间接影响的业务能力,或定时工作/脚本来做定时计算,这些都不是好的方法。自己亲身经历过一个大规模的零碎,多达上千个须要计算的业务数据字段,而晚期因为没有布局好,最初导致存在1000+的脚本在定时跑,最初导致了脚本之间对数据的影响,数据始终无奈精确,导致业务数据经常性的报数据问题谬误。 如上面一个场景:某个业务计算字段的值,正确为100,谬误为99, 然而因为历史代码的臃肿,会有多个计算脚本对其值做修复补丁计算,会有各个脚本互相抵触,在肯定的工夫距离内会存在数据值抖动,可能最终一个补丁修复正确,然而这种状况就会存在肯定工夫范畴内业务数据不正确,最终却奇观正确的状况,很让用户苦恼。
KisFlow就是为了解决当企业不具备数仓平台的计算能力,又仍然存在大量数据实时计算的场景,让业务工程师能够投入到数据流式计算的业务中来,并且能够复用罕用和通用的计算逻辑。
1.2 KisFlow实要反对的能力
流式计算
1、分布式批量生产能力(基于上游ODS生产配置:如Binlog、Kafka等)
2、Stateful Function能力,基于有状态的流式计算节点拼接,流式计算横纵向扩大。
3、数据流监控及修复能力,生产服务监控。
4、多流拼接及第三方中间件存储插件化。
分布式任务调度
5、分布式定时任务调度、日志监控、任务调度状态。
6、可视化调度平台。
1.3 KisFlow零碎定位
KisFlow为业务上游计算层,下层接数仓/其余业务方ODS层、上游接本业务存储数据中心。
1.4 KisFlow整体架构图
层级 | 层级阐明 | 包含子模块 |
---|---|---|
流式计算层 | 为KisFlow上游计算层,间接对接业务存储及数仓ODS层,如上游能够为Mysql Binlog、日志、接口数据等,为被动生产模式,提供KisFlow实时计算能力。 | KisFlow:分布式批量消费者,一个KisFlow是由多个KisFunction组合。 <br/> KisConnectors:计算数据流流中间状态长久存储及连接器。 <br/> KisFunctions:反对算子表达式拼接,Connectors集成、策略配置、Stateful Function模式、Slink流式拼接等。 <br/>KisConfig:KisFunction的绑定的流解决策略,能够绑定ReSource让Function具备固定的独立流解决能力。 <br/>KisSource:对接ODS的数据源 |
任务调度层 | 定时任务调度及执行器业务逻辑,包含任务调度平台、执行器治理、调度日志及用户治理等。提供KisFlow的定时工作、统计、聚合运算等调度计算能力。 | 任务调度平台可视化:包含工作的运行报表、调度报表、胜利比例、工作治理、配置管理、GLUE IDE等可视化治理平台。 执行器治理 <br/> KisJobs:Golang SDK及计算自定义业务逻辑、执行器的主动注册、工作触发、终止及摘除等。 执行器场景KisScenes: 依据业务划分的逻辑工作汇合。 <br/> 调度日志及用户治理:任务调度日志收集、调度具体、调度流程痕迹等。 |
流 | 组成 |
---|---|
KisFlow(1) | KisFunction(V) + KisFunction(S) + KisFunction(C) + KisFunction(E) |
KisFlow(2) | KisFunction(V) + KisFunction(L) + KisFunction(S) + KisFunction(C) + KisFunction(E) |
KisFlow(3) | KisFunction(V) + KisFunction(L) + KisFunction(C) + KisFunction(E) |
通过 KisFunction(S) 和 KisFunction(L)的并流组合关系,各个KisFlow有如下关系:
KisFlow(2) = KisFlow(1) + KisFlow(2)KisFlow(3) = KisFlow(1) + KisFlow(2) + KisFlow(3)
1.5 KisFlow要害模块
1.5.1 KisConfig
KisConfig为KisFlow的配置模块,其中一个Config蕴含Flow的配置和Function的配置等。
(1) KisFunction配置
kistype: funcfname: 测试KisFunction_S1fmode: Savesource: name: 被校验的测试数据源1-用户订单维度 must: - userid - orderidoption: cname: 测试KisConnector_1 retry_times: 3 retry_duration: 500 default_params: default1: default1_param default2: default2_param
(2) KisFlow配置
kistype: flowstatus: 1flow_name: MyFlow1flows: - fname: 测试PrintInput params: args1: value1 args2: value2 - fname: 测试KisFunction_S1 - fname: 测试PrintInput params: args1: value11 args2: value22 default2: newDefault - fname: 测试PrintInput - fname: 测试KisFunction_S1 params: my_user_param1: ffffffxxxxxx - fname: 测试PrintInput
KisFlow是一种流式概念状态,具体表现的特色如下:
1、一个KisFlow能够由任意KisFunction组成,且KisFlow能够动静的调整长度。
2、一个KisFunction能够随时动静的退出到某个KisFlow中,且KisFlow和KisFlow之间的关系能够通过KisFunction的Load和Save节点的退出,进行动静的并流和分流动作。
3、KisFlow在编程行为上,从面向流进行数据业务编程,变成了面向KisFunction的函数单计算逻辑的开发,靠近FaaS(Function as a service)体系。
(3) KisConnector配置
kistype: conncname: 测试KisConnector_1addrs: '0.0.0.0:9988,0.0.0.0:9999,0.0.0.0:9990'type: rediskey: userid_orderid_optionparams: args1: value1 args2: value2load: nullsave: - 测试KisFunction_S1
(4) KisFlow全局配置
#kistype Global为kisflow的全局配置kistype: global#是否启动prometheus监控prometheus_enable: true#是否须要kisflow独自启动端口监听prometheus_listen: true#prometheus取点监听地址prometheus_serve: 0.0.0.0:20004
1.5.2 KisFunction
KisFunction的类图设计如下
作者:刘丹冰Aceld github: https://github.com/aceld
KisFlow开源我的项目地址:https://github.com/aceld/kis-flow
连载中...
Golang框架实战-KisFlow流式计算框架(1)-概述