首页 > 其他分享 >Golang的KisFlow流式计算框架概述

Golang的KisFlow流式计算框架概述

时间:2024-07-18 12:57:31浏览次数:17  
标签:0.0 KisFunction 业务 流式 Golang 计算 任务调度 KisFlow

1.1 为什么需要KisFlow

一些大型toB企业级的项目,需要大量的业务数据,多数的数据需要流式实时计算的能力,但是很多公司还不足以承担一个数仓类似,Flink + Hadoop/HBase 等等。 但是业务数据的实时计算需求依然存在,所以大多数的企业依然会让业务工程师来消化这些业务数据计算的工作。

而这样只能直接查询业务数据库,这样会间接影响的业务能力,或定时任务/脚本来做定时计算,这些都不是好的办法。本人亲身经历过一个大规模的系统,多达上千个需要计算的业务数据字段,而早期因为没有规划好,最后导致存在1000+的脚本在定时跑,最后导致了脚本之间对数据的影响,数据始终无法准确,导致业务数据经常性的报数据问题错误。 如下面一个场景:某个业务计算字段的值,正确为100,错误为99, 但是由于历史代码的臃肿,会有多个计算脚本对其值做修复补丁计算,会有各个脚本相互冲突,在一定的时间间隔内会存在数据值抖动,可能最终一个补丁修复正确,但是这种情况就会存在一定时间范围内业务数据不正确,最终却奇迹正确的情况,很让用户苦恼。

image.png

KisFlow就是为了解决当企业不具备数仓平台的计算能力,又依然存在大量数据实时计算的场景,让业务工程师可以投入到数据流式计算的业务中来,并且可以复用常用和通用的计算逻辑。

1.2 KisFlow实要支持的能力

流式计算

1、分布式批量消费能力(基于上游ODS消费配置:如Binlog、Kafka等)
2、Stateful Function能力,基于有状态的流式计算节点拼接,流式计算横纵向扩展。
3、数据流监控及修复能力,消费服务监控。
4、多流拼接及第三方中间件存储插件化。

分布式任务调度

5、分布式定时任务调度、日志监控、任务调度状态。
6、可视化调度平台。

1.3 KisFlow系统定位

KisFlow为业务上游计算层,上层接数仓/其他业务方ODS层、下游接本业务存储数据中心。

image.png

1.4 KisFlow整体架构图

层级层级说明包括子模块
流式计算层为KisFlow上游计算层,直接对接业务存储及数仓ODS层,如上游可以为Mysql Binlog、日志、接口数据等,为被动消费模式,提供KisFlow实时计算能力。KisFlow:分布式批量消费者,一个KisFlow是由多个KisFunction组合。
KisConnectors:计算数据流流中间状态持久存储及连接器。
KisFunctions:支持算子表达式拼接,Connectors集成、策略配置、Stateful Function模式、Slink流式拼接等。
**KisConfig:**KisFunction的绑定的流处理策略,可以绑定ReSource让Function具有固定的独立流处理能力。
**KisSource:**对接ODS的数据源
任务调度层定时任务调度及执行器业务逻辑,包括任务调度平台、执行器管理、调度日志及用户管理等。提供KisFlow的定时任务、统计、聚合运算等调度计算能力。任务调度平台可视化:包括任务的运行报表、调度报表、成功比例、任务管理、配置管理、GLUE IDE等可视化管理平台。 执行器管理
KisJobs:Golang SDK及计算自定义业务逻辑、执行器的自动注册、任务触发、终止及摘除等。 执行器场景KisScenes: 根据业务划分的逻辑任务集合。
调度日志及用户管理:任务调度日志收集、调度详细、调度流程痕迹等。

image.png

组成
KisFlow(1)KisFunction(V) + KisFunction(S) + KisFunction© + KisFunction(E)
KisFlow(2)KisFunction(V) + KisFunction(L) + KisFunction(S) + KisFunction© + KisFunction(E)
KisFlow(3)KisFunction(V) + KisFunction(L) + KisFunction© + 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: func
fname: 测试KisFunction_S1
fmode: Save
source:
 name: 被校验的测试数据源1-用户订单维度
 must:
 - userid
 - orderid

option:
 cname: 测试KisConnector_1
 retry_times: 3
 retry_duration: 500
 default_params:
 default1: default1_param
 default2: default2_param

image.png

image.png

(2) KisFlow配置
kistype: flow
status: 1
flow_name: MyFlow1
flows:
 - 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

image.png

KisFlow是一种流式概念形态,具体表现的特征如下:
1、一个KisFlow可以由任意KisFunction组成,且KisFlow可以动态的调整长度。
2、一个KisFunction可以随时动态的加入到某个KisFlow中,且KisFlow和KisFlow之间的关系可以通过KisFunction的Load和Save节点的加入,进行动态的并流和分流动作。
3、KisFlow在编程行为上,从面向流进行数据业务编程,变成了面向KisFunction的函数单计算逻辑的开发,接近FaaS(Function as a service)体系。

image.png

(3) KisConnector配置
kistype: conn
cname: 测试KisConnector_1
addrs: '0.0.0.0:9988,0.0.0.0:9999,0.0.0.0:9990'
type: redis
key: userid_orderid_option
params:
 args1: value1
 args2: value2
load: null
save:
 - 测试KisFunction_S1

image.png

(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的类图设计如下

image.png

标签:0.0,KisFunction,业务,流式,Golang,计算,任务调度,KisFlow
From: https://blog.csdn.net/qq_38140936/article/details/140518973

相关文章

  • golang 无缓冲区通道的 range 操作
     对一个无缓冲通道(chan)进行range操作意味着想要迭代并消费通道中的所有值。但是,由于无缓冲通道的特性,这种操作具有特定的行为和潜在的副作用,主要体现在以下几点: 阻塞行为:当你开始对无缓冲通道进行range操作时,每次循环迭代都会尝试从通道接收一个值。如果通......
  • Golang 百题(实战快速掌握语法)_3
    目录是否包含空格知识点运行程序总结替换指定范围的字符知识点运行程序总结返回最大值知识点运行程序总结反转字符串知识点运行程序总结创建set类型知识点运行程序总结将度转换为弧度知识点运行程序总结限制数知识点运行程序总结二的幂知识点......
  • golang 实现负载均衡器-一致性哈希算法负载均衡器代码实现-2.0-xunznux
    go实现负载均衡器代码细节文章目录go实现负载均衡器代码细节代码实现原理介绍版本1.0版本2.05、负载均衡器接口增加方法AddServer以加权轮询负载均衡为例展示(SelectServer增加request和AddServer的实现):6、IP散列负载均衡7、一致性哈希负载均衡策略其他内容Lab1:M......
  • golang-切片slice的基本介绍
    Go语言中的切片(slice)基础引子在Go语言中,数组的长度是固定的,且数组长度属于类型的一部分。这种特性限制了数组的灵活性,无法动态扩容,对复杂情况难以适用。切片的定义切片(Slice)是一个拥有相同类型元素的可变长度的序列。它基于数组类型进行了封装,具有很大的灵活性,支持自动扩容。......
  • Golang time包
    time包时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包提供了一些关于时间显示和测量用的函数。time包中日历的计算采用的是公历,不考虑润秒。时间类型Go语言中使用time.Time类型表示时间。我们可以通过time.Now函数获取当......
  • golang使用yaml文件做配置文件
    yaml配置文件host:localhost:3306user:rootpwd:112233dbname:1安装yaml读取工具gogetgopkg.in/yaml.v2从yaml文件读取配置packagemain​import("fmt""gopkg.in/yaml.v2""os")​typeConfstruct{Host string`yaml:"host&qu......
  • golang IO流
    golangIO流file一些操作os包下FileInfo:获取文件信息Reader:读Write:写文件复制mkdircreateremoveSeeker接口设置光标的位置,读写文件typeSeekerinterface{//1、offset偏移量3//2、whence如何设置,当前光标的位置。Seek(offsetint64,whence......
  • golang的一些体会
     1.接口变量肯定对应一种具体类型,参考java的接口与实现。2.如果使用接口类型变量存储对象,那内存里会存两份内容:实际类型、接口类型(含接口中的函数指针列表)。   -其实这里的函数指针列表类似于C++的虚函数表。   -因为go的鸭子类型,所以接口变量必须记录接口中函数......
  • Golang - 使用责任链模式代替IF ELSE
    一、传统IF判断1、在业务中使用大量的if判断代码如下:packagemaintypeSellInfostruct{Pricefloat64OrderCountintTotalCountintMemberShipint}funcmain2(){vara=SellInfo{Price:1.0,OrderCount:......
  • golang channel 的众多应用场景123
    目录1.应用场景2.应用场景示例2.1并发控制2.2管道|范围迭代|数据传输2.3数据传递->生产者-消费者模型2.4互斥同步2.5信号通知2.6定时器我们知道go中有个很重要的数据结构叫做channel-通道,通过其特性,我们可以完成很多功能,自然就对应到很多应用场景了。1.应用场景......