連載中...
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(1)-概述
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(2)-項(xiàng)目構(gòu)建/基礎(chǔ)模塊-(上)
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(3)-項(xiàng)目構(gòu)建/基礎(chǔ)模塊-(下)
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(4)-數(shù)據(jù)流
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(5)-Function調(diào)度
1.1 為什么需要KisFlow
一些大型toB企業(yè)級(jí)的項(xiàng)目澳淑,需要大量的業(yè)務(wù)數(shù)據(jù),多數(shù)的數(shù)據(jù)需要流式實(shí)時(shí)計(jì)算的能力宜肉,但是很多公司還不足以承擔(dān)一個(gè)數(shù)倉(cāng)類似济赎,F(xiàn)link + Hadoop/HBase 等等嗅钻。 但是業(yè)務(wù)數(shù)據(jù)的實(shí)時(shí)計(jì)算需求依然存在粤剧,所以大多數(shù)的企業(yè)依然會(huì)讓業(yè)務(wù)工程師來(lái)消化這些業(yè)務(wù)數(shù)據(jù)計(jì)算的工作奕污。
而這樣只能直接查詢業(yè)務(wù)數(shù)據(jù)庫(kù),這樣會(huì)間接影響的業(yè)務(wù)能力按厘,或定時(shí)任務(wù)/腳本來(lái)做定時(shí)計(jì)算医吊,這些都不是好的辦法。本人親身經(jīng)歷過(guò)一個(gè)大規(guī)模的系統(tǒng)逮京,多達(dá)上千個(gè)需要計(jì)算的業(yè)務(wù)數(shù)據(jù)字段卿堂,而早期因?yàn)闆](méi)有規(guī)劃好,最后導(dǎo)致存在1000+的腳本在定時(shí)跑懒棉,最后導(dǎo)致了腳本之間對(duì)數(shù)據(jù)的影響御吞,數(shù)據(jù)始終無(wú)法準(zhǔn)確,導(dǎo)致業(yè)務(wù)數(shù)據(jù)經(jīng)常性的報(bào)數(shù)據(jù)問(wèn)題錯(cuò)誤漓藕。 如下面一個(gè)場(chǎng)景:某個(gè)業(yè)務(wù)計(jì)算字段的值,正確為100挟裂,錯(cuò)誤為99享钞, 但是由于歷史代碼的臃腫,會(huì)有多個(gè)計(jì)算腳本對(duì)其值做修復(fù)補(bǔ)丁計(jì)算,會(huì)有各個(gè)腳本相互沖突栗竖,在一定的時(shí)間間隔內(nèi)會(huì)存在數(shù)據(jù)值抖動(dòng)暑脆,可能最終一個(gè)補(bǔ)丁修復(fù)正確,但是這種情況就會(huì)存在一定時(shí)間范圍內(nèi)業(yè)務(wù)數(shù)據(jù)不正確狐肢,最終卻奇跡正確的情況添吗,很讓用戶苦惱。
KisFlow就是為了解決當(dāng)企業(yè)不具備數(shù)倉(cāng)平臺(tái)的計(jì)算能力份名,又依然存在大量數(shù)據(jù)實(shí)時(shí)計(jì)算的場(chǎng)景碟联,讓業(yè)務(wù)工程師可以投入到數(shù)據(jù)流式計(jì)算的業(yè)務(wù)中來(lái),并且可以復(fù)用常用和通用的計(jì)算邏輯僵腺。
1.2 KisFlow實(shí)要支持的能力
流式計(jì)算
1鲤孵、分布式批量消費(fèi)能力(基于上游ODS消費(fèi)配置:如Binlog、Kafka等)
2辰如、Stateful Function能力普监,基于有狀態(tài)的流式計(jì)算節(jié)點(diǎn)拼接,流式計(jì)算橫縱向擴(kuò)展琉兜。
3凯正、數(shù)據(jù)流監(jiān)控及修復(fù)能力,消費(fèi)服務(wù)監(jiān)控豌蟋。
4廊散、多流拼接及第三方中間件存儲(chǔ)插件化。
分布式任務(wù)調(diào)度
5夺饲、分布式定時(shí)任務(wù)調(diào)度奸汇、日志監(jiān)控、任務(wù)調(diào)度狀態(tài)往声。
6擂找、可視化調(diào)度平臺(tái)。
1.3 KisFlow系統(tǒng)定位
KisFlow為業(yè)務(wù)上游計(jì)算層浩销,上層接數(shù)倉(cāng)/其他業(yè)務(wù)方ODS層贯涎、下游接本業(yè)務(wù)存儲(chǔ)數(shù)據(jù)中心。
1.4 KisFlow整體架構(gòu)圖
層級(jí) | 層級(jí)說(shuō)明 | 包括子模塊 |
---|---|---|
流式計(jì)算層 | 為KisFlow上游計(jì)算層慢洋,直接對(duì)接業(yè)務(wù)存儲(chǔ)及數(shù)倉(cāng)ODS層塘雳,如上游可以為Mysql Binlog、日志普筹、接口數(shù)據(jù)等败明,為被動(dòng)消費(fèi)模式,提供KisFlow實(shí)時(shí)計(jì)算能力太防。 |
KisFlow:分布式批量消費(fèi)者,一個(gè)KisFlow是由多個(gè)KisFunction組合妻顶。 KisConnectors:計(jì)算數(shù)據(jù)流流中間狀態(tài)持久存儲(chǔ)及連接器。 KisFunctions:支持算子表達(dá)式拼接,Connectors集成讳嘱、策略配置幔嗦、Stateful Function模式、Slink流式拼接等沥潭。 KisConfig:KisFunction的綁定的流處理策略邀泉,可以綁定ReSource讓Function具有固定的獨(dú)立流處理能力。 KisSource:對(duì)接ODS的數(shù)據(jù)源 |
任務(wù)調(diào)度層 | 定時(shí)任務(wù)調(diào)度及執(zhí)行器業(yè)務(wù)邏輯钝鸽,包括任務(wù)調(diào)度平臺(tái)汇恤、執(zhí)行器管理、調(diào)度日志及用戶管理等寞埠。提供KisFlow的定時(shí)任務(wù)屁置、統(tǒng)計(jì)、聚合運(yùn)算等調(diào)度計(jì)算能力仁连。 |
任務(wù)調(diào)度平臺(tái)可視化:包括任務(wù)的運(yùn)行報(bào)表蓝角、調(diào)度報(bào)表、成功比例饭冬、任務(wù)管理使鹅、配置管理、GLUE IDE等可視化管理平臺(tái)昌抠。 執(zhí)行器管理 KisJobs:Golang SDK及計(jì)算自定義業(yè)務(wù)邏輯患朱、執(zhí)行器的自動(dòng)注冊(cè)、任務(wù)觸發(fā)炊苫、終止及摘除等裁厅。 執(zhí)行器場(chǎng)景KisScenes: 根據(jù)業(yè)務(wù)劃分的邏輯任務(wù)集合。 調(diào)度日志及用戶管理:任務(wù)調(diào)度日志收集侨艾、調(diào)度詳細(xì)执虹、調(diào)度流程痕跡等。 |
流 | 組成 |
---|---|
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) |
通過(guò) KisFunction(S) 和 KisFunction(L)的并流組合關(guān)系唠梨,各個(gè)KisFlow有如下關(guān)系:
KisFlow(2) = KisFlow(1) + KisFlow(2)
KisFlow(3) = KisFlow(1) + KisFlow(2) + KisFlow(3)
1.5 KisFlow關(guān)鍵模塊
1.5.1 KisConfig
KisConfig為KisFlow的配置模塊袋励,其中一個(gè)Config包含F(xiàn)low的配置和Function的配置等。
(1) KisFunction配置
kistype: func
fname: 測(cè)試KisFunction_S1
fmode: Save
source:
name: 被校驗(yàn)的測(cè)試數(shù)據(jù)源1-用戶訂單維度
must:
- userid
- orderid
option:
cname: 測(cè)試KisConnector_1
retry_times: 3
retry_duration: 500
default_params:
default1: default1_param
default2: default2_param
(2) KisFlow配置
kistype: flow
status: 1
flow_name: MyFlow1
flows:
- fname: 測(cè)試PrintInput
params:
args1: value1
args2: value2
- fname: 測(cè)試KisFunction_S1
- fname: 測(cè)試PrintInput
params:
args1: value11
args2: value22
default2: newDefault
- fname: 測(cè)試PrintInput
- fname: 測(cè)試KisFunction_S1
params:
my_user_param1: ffffffxxxxxx
- fname: 測(cè)試PrintInput
KisFlow是一種流式概念形態(tài)当叭,具體表現(xiàn)的特征如下:
1茬故、一個(gè)KisFlow可以由任意KisFunction組成,且KisFlow可以動(dòng)態(tài)的調(diào)整長(zhǎng)度蚁鳖。
2磺芭、一個(gè)KisFunction可以隨時(shí)動(dòng)態(tài)的加入到某個(gè)KisFlow中,且KisFlow和KisFlow之間的關(guān)系可以通過(guò)KisFunction的Load和Save節(jié)點(diǎn)的加入醉箕,進(jìn)行動(dòng)態(tài)的并流和分流動(dòng)作钾腺。
3甘邀、KisFlow在編程行為上,從面向流進(jìn)行數(shù)據(jù)業(yè)務(wù)編程垮庐,變成了面向KisFunction的函數(shù)單計(jì)算邏輯的開(kāi)發(fā),接近FaaS(Function as a service)體系坞琴。
(3) KisConnector配置
kistype: conn
cname: 測(cè)試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:
- 測(cè)試KisFunction_S1
(4) KisFlow全局配置
#kistype Global為kisflow的全局配置
kistype: global
#是否啟動(dòng)prometheus監(jiān)控
prometheus_enable: true
#是否需要kisflow單獨(dú)啟動(dòng)端口監(jiān)聽(tīng)
prometheus_listen: true
#prometheus取點(diǎn)監(jiān)聽(tīng)地址
prometheus_serve: 0.0.0.0:20004
1.5.2 KisFunction
KisFunction的類圖設(shè)計(jì)如下
作者:劉丹冰Aceld github: https://github.com/aceld
KisFlow開(kāi)源項(xiàng)目地址:https://github.com/aceld/kis-flow
連載中...
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(1)-概述
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(2)-項(xiàng)目構(gòu)建/基礎(chǔ)模塊-(上)
Golang框架實(shí)戰(zhàn)-KisFlow流式計(jì)算框架(3)-項(xiàng)目構(gòu)建/基礎(chǔ)模塊-(下)