你公司到底需不需要引入實時計算引擎?

前言

本文摘自本人《大數據重磅炸彈——實時計算框架 Flink》課程第二篇

自己之前發布過一篇 Chat 《大數據“重磅炸彈”:實時計算框架 Flink》,里面介紹了多種需求:

小田,你看能不能做個監控大屏實時查看促銷活動銷售額(GMV)?

小朱,搞促銷活動的時候能不能實時統計下網站的 PV/UV ???

小鵬,我們現在搞促銷活動能不能實時統計銷量 Top5 ???

小李,怎么回事???現在搞促銷活動結果服務器宕機了都沒告警,能不能加一個?

小劉,服務器這會好卡,是不是出了什么問題啊,你看能不能做個監控大屏實時查看機器的運行情況?

小趙,我們線上的應用頻繁出現 Error 日志,但是只有靠人肉上機器查看才知道情況,能不能在出現錯誤的時候及時告警通知?

小夏,我們 1 元秒殺促銷活動中有件商品被某個用戶薅了 100 件,怎么都沒有風控???

小宋,你看我們搞促銷活動能不能根據每個顧客的瀏覽記錄實時推薦不同的商品???

……

大數據發展至今,數據呈指數倍的增長,對實效性的要求也越來越高,于是像上面這種需求也變得越來越多了。

那這些場景對應著什么業務需求呢?我們來總結下,大概如下:

初看這些需求,是不是感覺很難?

那么我們接下來來分析一下該怎么去實現?

從這些需求來看,最根本的業務都是需要實時查看數據信息,那么首先我們得想想如何去采集這些實時數據,然后將采集的實時數據進行實時的計算,最后將計算后的結果下發到第三方。

數據實時采集

就上面這些需求,我們需要采集些什么數據呢?

  1. 買家搜索記錄信息

  2. 買家瀏覽的商品信息

  3. 買家下單訂單信息

  4. 網站的所有瀏覽記錄

  5. 機器 CPU/MEM/IO 信息

  6. 應用日志信息

數據實時計算

采集后的數據實時上報后,需要做實時的計算,那我們怎么實現計算呢?

  1. 計算所有商品的總銷售額

  2. 統計單個商品的銷量,最后求 Top5

  3. 關聯用戶信息和瀏覽信息、下單信息

  4. 統計網站所有的請求 IP 并統計每個 IP 的請求數量

  5. 計算一分鐘內機器 CPU/MEM/IO 的平均值、75 分位數值

  6. 過濾出 Error 級別的日志信息

數據實時下發

實時計算后的數據,需要及時的下發到下游,這里說的下游代表可能是:

  1. 告警方式(郵件、短信、釘釘、微信)

在計算層會將計算結果與閾值進行比較,超過閾值觸發告警,讓運維提前收到通知,及時做好應對措施,減少故障的損失大小。

  1. 存儲(消息隊列、DB、文件系統等)

數據存儲后,監控大盤(Dashboard)從存儲(ElasticSearch、HBase 等)里面查詢對應指標的數據就可以查看實時的監控信息,做到對促銷活動的商品銷量、銷售額,機器 CPU、MEM 等有實時監控,運營、運維、開發、領導都可以實時查看并作出對應的措施。

  • 讓運營知道哪些商品是爆款,哪些店鋪成交額最多,哪些商品成交額最高,哪些商品瀏覽量最多;

  • 讓運維可以時刻了解機器的運行狀況,出現宕機或者其他不穩定情況可以及時處理;

  • 讓開發知道自己項目運行的情況,從 Error 日志知道出現了哪些 Bug;

  • 讓領導知道這次促銷賺了多少 money。

從數據采集到數據計算再到數據下發,整個流程在上面的場景對實時性要求還是很高的,任何一個地方出現問題都將影響最后的效果!

實時計算場景

前面說了這么多場景,這里我們總結一下實時計算常用的場景有哪些呢?

  1. 交通信號燈數據

  2. 道路上車流量統計(擁堵狀況)

  3. 公安視頻監控

  4. 服務器運行狀態監控

  5. 金融證券公司實時跟蹤股市波動,計算風險價值

  6. 數據實時 ETL

  7. 銀行或者支付公司涉及金融盜竊的預警

……

另外我自己在我的群里也有做過調研(不完全統計),他們在公司 Flink(一個實時計算框架)使用場景有這些:

總結一下大概有下面這四類:

  1. 實時數據存儲

實時數據存儲的時候做一些微聚合、過濾某些字段、數據脫敏,組建數據倉庫,實時 ETL。

  1. 實時數據分析

實時數據接入機器學習框架(TensorFlow)或者一些算法進行數據建模、分析,然后動態的給出商品推薦、廣告推薦

  1. 實時監控告警

金融相關涉及交易、實時風控、車流量預警、服務器監控告警、應用日志告警

  1. 實時數據報表

活動營銷時銷售額/銷售量大屏,TopN 商品

說到實時計算,這里不得不講一下和傳統的離線計算的區別!

實時計算 VS 離線計算

再講這兩個區別之前,我們先來看看流處理和批處理的區別:

流處理與批處理

看完流處理與批處理這兩者的區別之后,我們來抽象一下前面文章的場景需求(實時計算):

實時計算需要不斷的從 MQ 中讀取采集的數據,然后處理計算后往 DB 里存儲,在計算這層你無法感知到會有多少數據量過來、要做一些簡單的操作(過濾、聚合等)、及時將數據下發。

相比傳統的離線計算,它卻是這樣的:

在計算這層,它從 DB(不限 MySQL,還有其他的存儲介質)里面讀取數據,該數據一般就是固定的(前一天、前一星期、前一個月),然后再做一些復雜的計算或者統計分析,最后生成可供直觀查看的報表(dashboard)。

離線計算的特點

  1. 數據量大且時間周期長(一天、一星期、一個月、半年、一年)

  2. 在大量數據上進行復雜的批量運算

  3. 數據在計算之前已經固定,不再會發生變化

  4. 能夠方便的查詢批量計算的結果

實時計算的特點

在大數據中與離線計算對應的則是實時計算,那么實時計算有什么特點呢?由于應用場景的各不相同,所以這兩種計算引擎接收數據的方式也不太一樣:離線計算的數據是固定的(不再會發生變化),通常離線計算的任務都是定時的,如:每天晚上 0 點的時候定時計算前一天的數據,生成報表;然而實時計算的數據源卻是流式的。

這里我不得不講講什么是流式數據呢?我的理解是比如你在淘寶上下單了某個商品或者點擊瀏覽了某件商品,你就會發現你的頁面立馬就會給你推薦這種商品的廣告和類似商品的店鋪,這種就是屬于實時數據處理然后作出相關推薦,這類數據需要不斷的從你在網頁上的點擊動作中獲取數據,之后進行實時分析然后給出推薦。

流式數據的特點

  1. 數據實時到達

  2. 數據到達次序獨立,不受應用系統所控制

  3. 數據規模大且無法預知容量

  4. 原始數據一經處理,除非特意保存,否則不能被再次取出處理,或者再次提取數據代價昂貴

實時計算的優勢

實時計算一時爽,一直實時計算一直爽,對于持續生成最新數據的場景,采用流數據處理是非常有利的。例如,再監控服務器的一些運行指標的時候,能根據采集上來的實時數據進行判斷,當超出一定閾值的時候發出警報,進行提醒作用。再如通過處理流數據生成簡單的報告,如五分鐘的窗口聚合數據平均值。復雜的事情還有在流數據中進行數據多維度關聯、聚合、塞選,從而找到復雜事件中的根因。更為復雜的是做一些復雜的數據分析操作,如應用機器學習算法,然后根據算法處理后的數據結果提取出有效的信息,作出、給出不一樣的推薦內容,讓不同的人可以看見不同的網頁(千人千面)。

使用實時數據流面臨的挑戰

  1. 數據處理唯一性(如何保證數據只處理一次?至少一次?最多一次?)

  2. 數據處理的及時性(采集的實時數據量太大的話可能會導致短時間內處理不過來,如何保證數據能夠及時的處理,不出現數據堆積?)

  3. 數據處理層和存儲層的可擴展性(如何根據采集的實時數據量的大小提供動態擴縮容?)

  4. 數據處理層和存儲層的容錯性(如何保證數據處理層和存儲層高可用,出現故障時數據處理層和存儲層服務依舊可用?)

總結

本文從日常需求來分析該如何去實現這類需求,需要實時采集、實時計算、實時下發,并用圖片把需求完成后的效果圖展示了出來,接著我們分析了對實時性要求高的計算這塊,然后將離線計算與實時計算進行了對比、批處理與流處理進行對比、離線計算的特點與實時計算的特點進行了對比,再加上我自己的調研結果,歸納了實時計算的四種使用場景,提出了使用實時計算時要面臨的挑戰。因為各種需求,也就造就了現在不斷出現實時計算框架,而下文我們將重磅介紹我們推薦的實時計算框架 —— Flink。

Github 代碼倉庫

https://github.com/zhisheng17/flink-learning/

以后這個項目的所有代碼都將放在這個倉庫里,包含了自己學習 flink 的一些 demo 和博客。

博客

1、Flink 從0到1學習 —— Apache Flink 介紹

2、Flink 從0到1學習 —— Mac 上搭建 Flink 1.6.0 環境并構建運行簡單程序入門

3、Flink 從0到1學習 —— Flink 配置文件詳解

4、Flink 從0到1學習 —— Data Source 介紹

5、Flink 從0到1學習 —— 如何自定義 Data Source ?

6、Flink 從0到1學習 —— Data Sink 介紹

7、Flink 從0到1學習 —— 如何自定義 Data Sink ?

8、Flink 從0到1學習 —— Flink Data transformation(轉換)

9、Flink 從0到1學習 —— 介紹 Flink 中的 Stream Windows

10、Flink 從0到1學習 —— Flink 中的幾種 Time 詳解

11、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 ElasticSearch

12、Flink 從0到1學習 —— Flink 項目如何運行?

13、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Kafka

14、Flink 從0到1學習 —— Flink JobManager 高可用性配置

15、Flink 從0到1學習 —— Flink parallelism 和 Slot 介紹

16、Flink 從0到1學習 —— Flink 讀取 Kafka 數據批量寫入到 MySQL

17、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 RabbitMQ

18、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 HBase

19、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 HDFS

20、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Redis

21、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Cassandra

22、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 Flume

23、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 InfluxDB

24、Flink 從0到1學習 —— Flink 讀取 Kafka 數據寫入到 RocketMQ

25、Flink 從0到1學習 —— 你上傳的 jar 包藏到哪里去了

26、Flink 從0到1學習 —— 你的 Flink job 日志跑到哪里去了

27、阿里巴巴開源的 Blink 實時計算框架真香

28、Flink 從0到1學習 —— Flink 中如何管理配置?

29、Flink 從0到1學習—— Flink 不可以連續 Split(分流)?

30、Flink 從0到1學習—— 分享四本 Flink 國外的書和二十多篇 Paper 論文

31、Flink 架構、原理與部署測試

32、為什么說流處理即未來?

33、OPPO 數據中臺之基石:基于 Flink SQL 構建實時數據倉庫

34、流計算框架 Flink 與 Storm 的性能對比

35、Flink狀態管理和容錯機制介紹

36、Apache Flink 結合 Kafka 構建端到端的 Exactly-Once 處理

37、360深度實踐:Flink與Storm協議級對比

38、如何基于Flink+TensorFlow打造實時智能異常檢測平臺?只看這一篇就夠了

39、Apache Flink 1.9 重大特性提前解讀

40、Flink 全網最全資源(視頻、博客、PPT、入門、實戰、源碼解析、問答等持續更新)

41、Flink 靈魂兩百問,這誰頂得???

源碼解析

1、Flink 源碼解析 —— 源碼編譯運行

2、Flink 源碼解析 —— 項目結構一覽

3、Flink 源碼解析—— local 模式啟動流程

4、Flink 源碼解析 —— standalone session 模式啟動流程

5、Flink 源碼解析 —— Standalone Session Cluster 啟動流程深度分析之 Job Manager 啟動

6、Flink 源碼解析 —— Standalone Session Cluster 啟動流程深度分析之 Task Manager 啟動

7、Flink 源碼解析 —— 分析 Batch WordCount 程序的執行過程

8、Flink 源碼解析 —— 分析 Streaming WordCount 程序的執行過程

9、Flink 源碼解析 —— 如何獲取 JobGraph?

10、Flink 源碼解析 —— 如何獲取 StreamGraph?

11、Flink 源碼解析 —— Flink JobManager 有什么作用?

12、Flink 源碼解析 —— Flink TaskManager 有什么作用?

13、Flink 源碼解析 —— JobManager 處理 SubmitJob 的過程

14、Flink 源碼解析 —— TaskManager 處理 SubmitJob 的過程

15、Flink 源碼解析 —— 深度解析 Flink Checkpoint 機制

16、Flink 源碼解析 —— 深度解析 Flink 序列化機制

17、Flink 源碼解析 —— 深度解析 Flink 是如何管理好內存的?

18、Flink Metrics 源碼解析 —— Flink-metrics-core

19、Flink Metrics 源碼解析 —— Flink-metrics-datadog

20、Flink Metrics 源碼解析 —— Flink-metrics-dropwizard

21、Flink Metrics 源碼解析 —— Flink-metrics-graphite

22、Flink Metrics 源碼解析 —— Flink-metrics-influxdb

23、Flink Metrics 源碼解析 —— Flink-metrics-jmx

24、Flink Metrics 源碼解析 —— Flink-metrics-slf4j

25、Flink Metrics 源碼解析 —— Flink-metrics-statsd

26、Flink Metrics 源碼解析 —— Flink-metrics-prometheus

26、Flink Annotations 源碼解析

27、Flink 源碼解析 —— 如何獲取 ExecutionGraph ?

28、大數據重磅炸彈——實時計算框架 Flink

29、Flink Checkpoint-輕量級分布式快照

30、Flink Clients 源碼解析

posted @ 2019-08-10 18:30 zhisheng_tian 閱讀(...) 評論(...) 編輯 收藏