什麼是大數據中的實時計算

什麼是大數據中的實時計算

來自專欄 Java馬戲團

本人才疏學淺, 只能講一講大致概念,幫助一些Java入門後的小夥伴看到更廣闊的世界,不再害怕入門大數據這個領域。


大數據現在主要分為2種計算形式:

  • Batch,傳統的離線計算——比如MapReduce任務、Hive等,他們的特點是,可以一批一批處理,比如,統計今天所有訂單的總額——那麼數據就可以很明顯的分批次處理,簡稱批處理
  • Streaming,實時計算——數據實時產生,產生後就立刻處理,這種計算方式傾向於把數據看作是Streaming,流。

離線批處理已經比較成熟,也好理解,數據都是現成的,甚至排好序了。人們只需要考慮要怎麼計算他們就行。文章其實可以參考之前寫的一些。

而實時流計算,則出現的稍晚一些,我們就聊聊這些流計算。

中間件

消息中間件,廣泛出現在分散式的系統中。

它是幹嘛的,我們為什麼要用它?

  • 流量削峰填谷
  • 業務上下游解耦
  • 數據的保存、記錄
  • 連接其他的系統

就算沒有中間件,我們可以通過http請求直接調用伺服器,伺服器也會返回給你結果。之後這樣的一次請求就消失了,而往往我們需要對這些數據進行二次處理,或者控制它的流量,不能突然加大,把伺服器打垮。

總之,你可以把中間件理解成一個很長的水管,你可以在上游自由地生產數據(生產者),也可以在下游隨意地消費他們(對他們進行計算處理,又叫消費者);你甚至可以隨時消費這個水管中保存的任意時刻的數據。

中間件的一些代表,Kafka,ActiveMQ,RocketMQ。

實時流處理的數據來源,一般就是中間件。

Streaming 流計算

流計算分為2種流派,一種是通過各個流處理引擎或者中間件提供的SDK,大多是一個泛型的抽象類,供你override,編寫每條數據到來時,你要做的業務邏輯,還有一種,是寫SQL語句即可。

為了便於稱呼,我在接下來稱他們為Streaming API與Streaming SQL

Streaming API

這種其實很常見,比如你在中間件上游生產這樣一種數據:

public class Main{ private int num; private String name;}

你就可以在下游的時候,告訴框架,你的數據是這樣子的,然後每來一個數據,把num + 1,然後寫入到下一個中間件里去。

這就是最簡單的實時處理了。

世界要是可以一直這麼簡單就好了,但往往我們會有更複雜的需求。

我列舉一些常有的需求:

過濾

num < 0的不要了

分流

即,原本是一條大粗水管子,我現在要把它們分開一些,name不同的數據不能分到一起。這樣的話, 你就得到了多條邏輯上的stream,同一個stream裡面的數據,name都一樣。

窗口

統計最後10分鐘的num總和。你就需要一個10分鐘的window。可以簡易地理解為,就算是流處理的世界,我也需要一些小的batch。

這些需求常常伴隨、組合出現,通過Streaming API,經過一定程度的學習,你就可以把數據流玩的非常溜。

那你說你不想學這麼多,有沒有簡易一點的,當然有了——

Streaming SQL

通過寫SQL的方式,來完成實時流計算,比如數據的定義:

## 建立源頭表CREATE STREAM TABLE source_data( num int, name string)##後面一般是源中間件的定義,用戶密碼等

同樣的,結果表也可以這樣定義

## 定義結果表,一般是另一個中間件CREATE RESULT TABLE result_table( num int, name string)##後面一般是結果中間件的定義,用戶密碼等

之後就可以直接寫業務邏輯,num+1

INSERT INTO TABLE result_tableSELECT (num+1) as num, name as namefromsource_data;

是不是很easy,我們再看看如果加上10分鐘統計num總和的需求,該怎麼做呢

INSERT INTO TABLE result_tableSELECT sum(num+1) as num, name as namefromsource_dataWHERE num > 0GROUP BY $10分鐘窗口定義$, name;

多了where,與group by

(窗口這裡是偽代碼,因為它本身是個複雜的概念,今天太晚了,明後天再說吧)

用Streaming SQL,你甚至可以非常方便地使用join語法來進行雙流聚合操作,就跟操作MySQL一模一樣。

那麼說了這麼多,你有沒有想在業務中主動試一試流處理呢?


簡單地介紹,希望對你有幫助。


推薦閱讀:

第二季 ? 第二期 我們因何與眾不同?
本周知乎熱門視頻 | 新手進健身房必練的四個動作
關燈後還敢玩手機!我反手就是一記科普!
怎樣看待「中國成功研發反隱身米波雷達」的新聞?

TAG:流計算 | 實時計算 | 科普 |