Wormhole大數據流式處理平臺五大功能

導讀:在上一篇文章「Wormhole 大數據流式處理平臺之設計思想」中,咱們介紹了Wormhole的設計思想,並給出了Stream、UMS、Flow、Namespace等相關概念的具體定義,從文章中咱們得知,Wormhole做爲實時流式處理平臺,其設計思想最終是爲流上處理數據而服務的。在本文中,咱們主要從Wormhole的功能設計入手,重點介紹Wormhole所支持的幾個基本功能。git

Wormhole支持的功能不少,如圖1所示,除了流式數據處理,Wormhole在管理和運維等方面也作的比較完善。下面咱們從流式處理、平臺管理、數據質量、數據安全以及運維監控五個維度來介紹Wormhole的具體功能。github

1、流式處理

Wormhole的核心是流式處理,並將流式處理抽象爲Flow(流式處理邏輯管道,具體參見:#Wormhole# 流式處理平臺設計思想)。Flow的引入,使得一個Spark Streaming上能夠跑不一樣的處理邏輯,也就是多個Flow能夠在一個Spark Streaming上同時執行而互不影響。這種異構邏輯的並行處理大大提升了資源利用率,也提升了流式處理的易用性。web

如圖2所示,Flow從處理過程角度分爲解析、轉換、寫入三個過程,具體以下:sql

1.1 解析

Flow支持多種消息協議,UMS和用戶自定義JSON兩種消息協議:數據庫

  • UMS

UMS是Flow支持的標準消息協議,在設計思想的文章中有介紹,這裏再也不介紹。(參見:#Wormhole# 流式處理平臺設計思想)json

  • 自定義JSON

開源後,爲了適配用戶已有系統的數據格式需求,Flow開始支持用戶自定義JSON消息協議,使用也比較方便簡單,只要在頁面貼一個JSON消息例子,就會自動解析,而後經過點擊配置便可完成自定義JSON的Schema的定義。segmentfault

1.2 轉換

這裏的轉換主要指對流上指定的Namespace的數據進行處理,處理方式包括Transform SQL(包含Spark SQL、Lookup SQL、Stream Join SQL)和接口擴展等,而且全部操做均可以有多項,即一個Flow中能夠有多個Spark SQL,多個Lookup SQL,多個接口擴展等,具體以下:緩存

  • Spark SQL

利用Spark自然支持的SQL對數據作一些map操做,用戶指須要在頁面編寫SQL便可實現實時對流上數據的Spark SQL處理。安全

  • Lookup SQL

Lookup SQL是指將流上指定Namespace數據按某個或某幾個字段join外部實體數據系統的數據,也就是將流上的數據加列處理,在頁面編寫SQL便可實現對流上數據的Lookup操做。目前支持多種Lookup SQL數據系統,包括Mysql、Oracle、Postgresql、SQLServer、Cassandra、Mongodb、Phoenix、ElasticSearch、Vertical、KUDU、Redis、Hbase,除了Redis和Hbase寫法是類SQL寫法以外,其餘都支持SQL寫法。下面舉例介紹SQL的編寫:app

✔ 單字段關聯:

select col1, col2, … from tableName where colA in namespace.X;

✔ 多字段關聯:

select col1, col2, … from tableName where (colA,colB) in (namespace.X,namespace.Y);

✔ Redis

因Redis不是結構化存儲方式,因此只能模仿SQL寫法:

Redis的value是字符串時:select name:type as n1 from default(simple) joinby (key1+'_'+key2);

Redis的value是JSON串時:select name:int,name:string,name:long from default(json) joinby (key1+'_'+key2);

✔ HBase

考慮到HBase的性能,只支持根據Rowkey Lookup:

select h1:string as hx,h3:string from test_lookup(cf1) joinby mod(hash(sub(reverse(md5(id2)),6)),1000)/value(id2+'_');

mod/hash/sub/reverse/md5都是考慮數據傾斜問題對rowkey的數據進行的處理;

✔ Stream Join SQL

Stream Join SQL是指將流上的兩個Namespace的數據作Join操做,即將流上的數據Namespace A去Join流上的數據Namespace B,獲得一個寬表。

✔ Transform擴展接口

雖然經過SQL已經能夠解決大部分數據處理邏輯需求,可是爲了知足一些個性化邏輯的應用,Flow定義了標準的擴展接口,用戶實現接口便可編寫自定義邏輯,而且能夠與Transform SQL在一個Flow裏同時使用。

✔ Event Time Strategy

基於事件時間,根據數據狀態作的一些策略,目前支持在一段時間後,數據某些字段不符合條件時,能夠作一些處理的選擇。主要針對的場景是當Lookup時,若是關聯的數據不存在(延遲等緣由),那麼就能夠將未Lookup到的數據緩存一段時間,直到超時。

✔ UDF熱加載

因Spark SQL支持UDF,Wormhole也支持了UDF,而且支持熱加載,即在不停Spark Streaming的狀況下,加載UDF的jar包和類,並使用UDF。

1.3 寫入

寫入是指將流上處理好的數據寫入到指定的數據系統中。

  • 多種Sink寫入

目前支持主流的關係型數據庫和NoSQL系統,包括Mysql、Oracle、HBase、Kafka、ElasticSearch、MongoDB、Cassandra、KUDU。

  • Sink寫入方式多樣

能夠根據用戶配置肯定數據的寫入方式,目前支持追加和冪等寫入。追加是指將全部數據insert到數據系統中,不區分數據狀態;冪等是指Wormhole接收到的數據包括insert/update/delete狀態,但可以保證與源數據一致狀態的寫入到數據系統中(若是Kafka中數據能保證順序則支持強一致性,不然支持最終一致性)。

  • Sink接口擴展

Wormhole雖然已經支持了主流的存儲系統,但爲了更好的兼容性,Flow定義了標準的寫入接口,用戶能夠根據本身的需求實現寫入邏輯。

2、平臺管理

Wormhole提供了一個可視化操做的web系統—Rider,用來對各項配置和流程進行統一管理。同時也能夠對外提供Restful方式操做Wormhole Stream和Wormhole Flow。而且經過Rider來管理和配置多租戶等,具體功能能夠參考咱們的《Wormhole用戶手冊》。

https://edp963.github.io/worm...

3、數據質量

互聯網公司中存在着大量數據,而且數據依然以很快的速度增加。其中,金融數據的質量異常重要,這一點與互聯網其餘數據有很大的不一樣。Wormhole在這方面作了不少工做。

3.1 數據一致性

Wormhole能夠保證數據的最終一致性,這一點主要是經過冪等、數據備份和回灌等方式來保證。

3.2 異常反饋

當在計算過程當中,若是出現異常,則Wormhole就會把相關的Flow、起止offset、event time等信息反饋給監控系統,而後能夠手動對錯誤進行處理。

3.3 端到端比對

爲了驗證數據的一致性,實現了一個端到端實時比對的插件,在Flow進行中便可數據比對,而且不影響Flow執行。

3.4 數據回灌

Wormhole提供了數據備份的能力,將數據以文本形式寫入到HDFS上。同時Wormhole也支持將備份的數據按必定條件(起止時間等)將數據回灌到對應的topic中,而後讓Wormhole再消費一次。好比有異常反饋時,能夠手動的將對應數據從新回灌到對應topic中,而後Wormhole能夠冪等的將數據寫入到各個數據系統,保證數據最終一致性。

4、數據安全

金融數據是很是敏感的,那麼平臺化就要保證數據的安全,在這方面,Wormhole經過權限控制、數據隔離和脫敏加密等方式保證了數據安全:

4.1 權限控制

Wormhole定義了三種類型用戶,分別爲管理員用戶(admin)、普通用戶(user)和第三方系統用戶(app)。admin用戶負責管理數據資源的鏈接地址,UDF jar包,其餘用戶等信息。user用戶負責管理流式執行引擎和業務邏輯。app用戶表明經過第三方系統與wormhole集成的用戶,具備部分user用戶的能力。經過權限的控制,實現了功能的約束,進而保證數據安全。

4.2 數據隔離

全部數據都是經過Namespace定義的,user用戶可使用哪些數據(Namespace)資源是由admin分配的,user用戶登陸到系統後,只能使用admin用戶爲其受權的數據(Namespace),也就實現了數據隔離。

4.3 脫敏加密

金融數據的一些信息須要進行加密才能對其餘項目提供,那就能夠在流上直接處理,經過UDF對某些字段進行加密、加鹽等等,保證使用方看到的數據是脫敏的,進而保證敏感信息不外泄。

5、運維監控

5.1 實時動態管理

實時動態管理包括兩方面,一方面是能夠對Flow的相關配置進行實時管理,而且實時生效,這一點主要是使用了Zookeeper的能力;另外一方面主要是針對Spark不支持的一些功能進行了擴展,包括不停Spark Streaming時,動態加載與註冊UDF、和動態管理接入的Topic。

5.2 生命週期管理

Wormhole的Stream和Flow分別設計了一套有限狀態機,也就是爲二者分配了生命週期,保證操做的正確性。

5.3 性能監控

經過每一個batch的每一個Flow處理狀況的Feedback信息,能夠對每一個batch的延遲狀況、吞吐量、數據量等實時監控。

5.4 硬件資源隔離

主要從兩個層次實現,一個是每一個項目可使用多少資源(CPU/內存)都是分配的,超過期沒法啓動新的Stream;另外一個是每一個Spark Streaming應用的資源是指定的,而且由Yarn分配,就是說Spark Streaming應用自己已是資源隔離的。

流式處理支持異構邏輯的並行處理,提升了資源利用率;可視化操做的web系通通一管理各項配置和流程;數據質量經過「異常反饋」、「數據回灌」等方式獲得了極大保障;數據安全也因「權限控制」、「數據隔離」、「脫敏加密」等方式得以實現。在介紹Wormhole的功能篇中,咱們瞭解了Wormhole所支持的幾個重要功能。那麼Wormhole的設計細節具體是怎樣來實現的呢?在Wormhole系列的第三篇文章中,咱們會講解其設計細節中的幾個關鍵點,敬請你們期待~

做者:趙平

來源:宜信技術學院

相關文章
相關標籤/搜索