數棧是雲原生—站式數據中臺PaaS,咱們在github和gitee上有一個有趣的開源項目:FlinkX,FlinkX是一個基於Flink的批流統一的數據同步工具,既能夠採集靜態的數據,也能夠採集實時變化的數據,是全域、異構、批流一體的數據同步引擎。你們喜歡的話請給咱們點個star!star!star!mysql
github開源項目:https://github.com/DTStack/fl...git
gitee開源項目:https://gitee.com/dtstack_dev...github
2020年春節期間,一場突如其來的疫情在全國蔓延開來,打破了你們原有的工做生活節奏。疫情期間,你們宅在家就能隨時看到實時的大數據疫情地圖,能夠隨時刷到本身當前感興趣的抖音視頻,這一切背後依賴的最重要的技術,就是實時大數據處理技術。sql
如今疫情即將過去,國家提出要加快大數據中心等新型基礎設施建設,實時大數據處理平臺建設成爲企業數智化轉型過程當中愈來愈重要的部分。數據庫
在大數據處理領域,一般根據數據的不一樣性質,將任務劃分爲實時計算與離線計算,以溫度傳感器的場景舉例:假設某城市安裝了大量的溫度傳感器,每一個傳感器每隔1min上傳一次採集到的溫度信息,由氣象中心統一彙總,每隔5分鐘更新一次各個地區的溫度,這些數據是一直源源不斷的產生的,且不會中止。實時計算就主要用於「數據源源不斷的產生,並且不會中止,須要以最小的延遲得到計算結果」的場景,這種最小的延遲一般爲秒級或分鐘級。架構
爲了知足這種數據量很大,並且實時性要求又很是高的場景,一般會採用實時計算技術,實時計算的「數據源源不斷」的特定決定了其數據處理方式與離線是大相徑庭的。併發
Figure 1 實時計算和離線計算的區別app
離線計算的批量、高延時、主動發起的計算特色不一樣,實時計算是一種持續、低延時、事件觸發的計算任務。離線計算須要先裝載數據,而後提交離線任務,最後任務計算返回結果;實時計算首先要提交流式任務,而後等實時流數據接入,而後計算出實時結果流。運維
Figure 2 實時計算和離線計算的區別(形象圖)分佈式
形象點能夠理解爲離線計算是開着船去湖裏(數據庫)打漁,實時計算爲在河流(數據流)上創建大壩發電。進一步發散,湖泊的造成依賴河流,河流肯定上下邊界就是湖泊;其實,離線計算能夠理解爲實時計算的一種特例。
Figure 3 實時計算能解決的問題
從技術領域來看,實時計算主要用於如下場景:
Figure 4 實時開發的全鏈路流程
實時採集——使用流式數據採集工具將數據流式且實時地採集並傳輸到大數據消息存儲(kafka等),流式數據存儲做爲實時計算的上游,提供源源不斷的數據流去觸發流式計算做業的運行。流數據做爲實時計算的觸發源驅動實時計算運行。所以,一個實時計算做業必須至少使用一個流數據做爲源。每一條進入的流數據將直接觸發實時計算的一次流式計算處理。數據在實時計算系統中處理分析後隨機寫到下游數據存儲,下游數據庫通常與業務相關,能夠用來作實時報表、實時大屏等數據消費。
整個全鏈路的實時開發中,實時採集是實時計算的上游。對於很對企業而言,自己已經有數據存儲系統,可是很大一部分都是離線的關係型數據庫。如何將這些離線的關係型數據庫的實時增量數據,提供給實時計算去分析,是一個亟需解決的環節。以下圖所示,是袋鼠雲實時數據採集工具的功能架構。
Figure 5 實時數據採集工具FlinkX數據流程
袋鼠雲實時數據採集做爲StreamWorks平臺的一個模塊,有如下功能特色。
袋鼠雲實時開發平臺(StreamWorks)基於 Apache Flink 構建的雲原生一站式大數據流式計算平臺,涵蓋從實時數據採集到實時數據ETL的全鏈路流程。亞秒級別的處理延時, Datastream API 做業開發,與已有大數據組件兼容,幫助企業實時數據智能化轉型,助力新型基礎設施建設。
在以往的數據開發技術棧中,SQL語言能解決大部分業務場景的問題。StreamWorks的核心功能是主打以SQL語義的流式數據分析能力(FlinkStreamSQL),下降開發門檻。提供Exactly-Once的處理語義保證,保證業務精確一致。
Figure 6 StreamWorks功能架構
如上圖所示,StreamWorks包含以下幾個模塊:
Figure 7 StreamWorks平臺層級
如上圖所示,StreamWorks實時大數據開發平臺基於Apache Flink計算引擎,作了一層SQL化的封裝,最上層有一個在線開發的IDE平臺。平臺有如下幾個優點點:
FlinkX:自研的批流一體的數據採集工具,已經開源!
Figure 8 傳統開發模式 VS StreamWorks開發模式
講了這麼多,咱們的產品到底如何方便你們進行實時業務邏輯開發的,咱們仍是拿最多見的網站流量分析的例子說明下。好比,某網站須要對訪問來源進行分析:
以下圖所示,從日誌服務讀取該站點訪問日誌,解析日誌中的來源並檢查來源是否在感興趣的網站列表中(相似來源網站的白名單,保存在MySQL中),統計來自各個網站的流量PV,最終結果寫出到MySQL。
Figure 9 業務邏輯流程圖
用StreamSQL代碼實現的話很是簡單,只須要14行僞代碼便可搞定。
CREATE TABLE log_source(dt STRING, …) WITH (type=kafka); CREATE TABLE mysql_dim(url STRING, …, PRIMARY KEY(url)) WITH (type=mysql); CREATE TABLE mysql_result(url STRING, …, PRIMARY KEY(url)) WITH (type=mysql); INSERT INTO mysql_result SELECT l.url, count(*) as pv … FROM log_source l JOIN mysql_dim d ON l.url = d.url group by l.url
通常的推薦系統都是基於標籤來實現的,基於標籤的推薦其實應用很廣泛,好比頭條,好比抖音,都用到了大量的標籤,這樣的推薦系統有不少優勢,好比實現簡單、可解釋性好等。如何經過標籤來實現實時商品或者內容的推薦呢?
首先一個新的用戶在註冊app帳號的時候會填寫一些比較固定的數據,好比年齡、職業等信息,這些信息能夠經過離線計算分析出長期興趣標籤的結果,存儲到長期興趣標籤庫。用戶在最近感興趣的內容(好比最近10分鐘內關注的信息點)能夠經過實時計算分析出短時間的興趣標籤結果,而後再經過實時開發的數據流關聯維表的功能,把短時間的感興趣標籤和長期興趣標籤庫作關聯,最終生成新的推薦內容給到客戶端,造成一個用戶數據流的閉環,從而實現一個簡單的實時推薦系統。具體流程以下圖所示。
Figure 10 基於StreamWorks構建實時推薦系統
疫情即將過去,生活還要繼續。隨着「新基建」建設不斷深化下去,愈來愈多的實時化場景會出如今咱們生活中。袋鼠雲做爲新基建解決方案供應商,咱們的口號就是把將來變成如今,在將來會賦能更多的企業實時化轉型。