自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

看過許多分享為什么我還是不懂 Flink?

開發(fā) 架構(gòu)
隨著大數(shù)據(jù)時代深入普及,數(shù)據(jù)倉庫從業(yè)者也必須得跟上時代發(fā)展,去學(xué)習(xí)很多大數(shù)據(jù)組件,離線數(shù)倉我們可以使用 Hive 或者 ODPS 等云服務(wù)。

[[432373]]

一、為什么要學(xué)習(xí) Flink

隨著大數(shù)據(jù)時代深入普及,數(shù)據(jù)倉庫從業(yè)者也必須得跟上時代發(fā)展,去學(xué)習(xí)很多大數(shù)據(jù)組件,離線數(shù)倉我們可以使用 Hive 或者 ODPS 等云服務(wù)。傳統(tǒng)數(shù)倉轉(zhuǎn)型大數(shù)據(jù)數(shù)倉,憑借熟悉的 SQL 實踐技能和豐富的數(shù)倉方法論等理論知識,想必大家不會遇到太大阻力。

一方面隨著數(shù)據(jù)應(yīng)用的深入發(fā)展,對于時效性的要求越來越高。另一方面大數(shù)據(jù)技術(shù)棧從 Storm 到 Spark Streaming 再到 Flink API 再到 Flink SQL。目前為止,實時計算在吞吐、易用性、穩(wěn)定性方面已經(jīng)非常成熟了。

應(yīng)用上的真實需求伴隨實時計算的成熟(特別是這兩年 Flink 的大力推廣和迭代),使得實時數(shù)倉和批流一體概念成為熱點話題,但是離線數(shù)倉向?qū)崟r數(shù)倉的轉(zhuǎn)變需要考慮的因素很多,學(xué)習(xí)起來困難重重。

1.1 Flink 是什么

在 Flink 之前,傳統(tǒng)的批處理方式和早期的流式處理框架也有自身的局限性,難以滿足延遲、吞吐、容錯、便捷性等方面日益苛刻的要求。在這種形勢下,F(xiàn)link 以其獨特的天然流式計算特性和更為先進(jìn)的架構(gòu)設(shè)計,極大地改善了以前的流式處理框架所存在的問題。

Flink 是德國幾所大學(xué)發(fā)起的的學(xué)術(shù)項目,后來不斷發(fā)展壯大,并于 2014 年末成為 Apache 頂級項目,美團(tuán)在 2017 年已經(jīng)在使用了,直到 2019 年初隨著阿里的大力推廣,F(xiàn)link 在國內(nèi)開始普及,并且版本迭代非常之快,兩年半時間已經(jīng)從 1.7 迭代到 1.14 了。

Flink 目前主要應(yīng)用在流處理,批處理被認(rèn)為是流的特例,最終目標(biāo)是批流一體、完全 SQL 化。

越來越多的國內(nèi)公司開始用 Flink 來做實時數(shù)據(jù)處理,其中阿里巴巴率先將 Flink 技術(shù)在全集團(tuán)推廣使用,比如 Flink SQL 與 Hive 生態(tài)的集成、擁抱 AI 等;騰訊、百度、字節(jié)跳動、滴滴、華為等眾多互聯(lián)網(wǎng)公司也已經(jīng)將 Flink 作為未來技術(shù)重要的發(fā)力點。在未來 3 ~ 5 年,F(xiàn)link 必將發(fā)展成為企業(yè)內(nèi)部主流的數(shù)據(jù)處理框架,成為開發(fā)者進(jìn)入大廠的“敲門磚”。

1.2 Flink 能做什么

實時數(shù)據(jù)計算

雙十一電商大促銷,管理者要以秒級的響應(yīng)時間查看實時銷售業(yè)績、庫存信息以及與競品的對比結(jié)果,以爭取更多的決策時間。

股票交易要以毫秒級的速度來對新信息做出響應(yīng)。

風(fēng)險控制要對每一份欺詐交易迅速做出處理,以減少不必要的損失。

網(wǎng)絡(luò)運營商要以極快速度發(fā)現(xiàn)網(wǎng)絡(luò)和數(shù)據(jù)中心的故障等等。

實時數(shù)據(jù)倉庫和 ETL

離線數(shù)據(jù)倉庫的計算和數(shù)據(jù)的實時性均較差。在許多場景下,數(shù)據(jù)本身的價值隨著時間的流逝會逐步減弱,因此數(shù)據(jù)發(fā)生后必須盡快的達(dá)到用戶的手中,實時數(shù)倉的構(gòu)建需求也應(yīng)運而生。

實時數(shù)據(jù)倉庫的建設(shè)是“數(shù)據(jù)智能 BI”必不可少的一環(huán),也是大規(guī)模數(shù)據(jù)應(yīng)用中必然面臨的挑戰(zhàn)。

Flink 在實時數(shù)倉和實時 ETL 中有天然的優(yōu)勢:

  • 狀態(tài)管理,實時數(shù)倉里面會進(jìn)行很多的聚合計算,這些都需要對于狀態(tài)進(jìn)行訪問和管理,F(xiàn)link 支持強大的狀態(tài)管理。
  • 豐富的 API,F(xiàn)link 提供極為豐富的多層次 API,包括 Stream API、Table API 及 Flink SQL。
  • 生態(tài)完善,實時數(shù)倉的用途廣泛,F(xiàn)link 支持多種存儲(HDFS、ES 等)。
  • 批流一體,F(xiàn)link 已經(jīng)在將流計算和批計算的 API 進(jìn)行統(tǒng)一。

實時數(shù)據(jù)同步 CDC

Flink SQL CDC 可以從 MySQL、PostgreSQL 等數(shù)據(jù)庫直接讀取數(shù)據(jù),實時寫入到 sink 組件。并且整個過程對源端數(shù)據(jù)庫是沒有影響的。

8月份 ,F(xiàn)link CDC 2.0 也已經(jīng)正式發(fā)布,此次的核心改進(jìn)和提升包括:

  • 并發(fā)讀取,全量數(shù)據(jù)的讀取性能可以水平擴(kuò)展;
  • 全程無鎖,不對線上業(yè)務(wù)產(chǎn)生鎖的風(fēng)險;
  • 斷點續(xù)傳,支持全量階段的 checkpoint。

事件驅(qū)動型應(yīng)用 CEP

事件驅(qū)動型應(yīng)用是一類具有狀態(tài)的應(yīng)用,它從一個或多個事件流提取數(shù)據(jù),并根據(jù)到來的事件觸發(fā)計算、狀態(tài)更新或其他外部動作。

常見的應(yīng)用場景如下:

  • 反欺詐
  • 異常檢測
  • 基于規(guī)則的報警
  • 業(yè)務(wù)流程監(jiān)控
  • (社交網(wǎng)絡(luò))Web 應(yīng)用
  • 機(jī)器學(xué)習(xí)與圖計算

Flink 的野心一點都不比 Spark 小。做為一個統(tǒng)一的一站式大數(shù)據(jù)計算引擎,雖然這兩塊目前還沒有真正發(fā)力,讓我們拭目以待吧。

二、坎坷的學(xué)習(xí)之路

2.1 理論知識學(xué)習(xí)與動手實操

第一次接觸 Flink 還是 2019 年初,那時候 Flink 的使用還僅限于各個互聯(lián)網(wǎng)大廠,阿里收購 Flink 背后的公司后開始大力宣傳,組織了系列性的在線課程,那時候網(wǎng)上的資源還好很少,F(xiàn)link 的問題還很多。我也只是硬著頭皮聽到了 1.5 節(jié)就掉隊了。但當(dāng)時很欣慰的是我竟然照著 1.3 的手冊下載了源碼并且編譯成功了(那時候還是 1.7 版本),雖然花費了好幾天的時間,但對于開發(fā)小白來說已經(jīng)很滿意了。

我為什么會掉隊呢,因為純理論的知識理解起來真的很費勁,而且也記不住,所以就在網(wǎng)上找了些實戰(zhàn)視頻跟著敲了一兩周的代碼,比如 PV/UV、電商訂單金額計算,并且同時實現(xiàn)了 Spark/Flink 兩個版本。但感覺這些更像是個 Demo,因為實際工作環(huán)境要面對的問題可要比這些要復(fù)雜。最終由于工作中沒有實時計算場景也就放棄了。

2.2 試圖用 Flink 解決公司實時同步問題

如今,我們公司剛好有了實時計算的需求,很簡單,就是要把業(yè)務(wù)系統(tǒng)的十幾張表實時同步到新的數(shù)據(jù)庫中,供數(shù)據(jù)分析團(tuán)隊使用。之前用的是阿里云服務(wù) DTS,直接 Mysql 實時同步到 ODPS ,但 DTS 同步到 ODPS,數(shù)據(jù)源的刪除更新都會新增一條數(shù)據(jù),使用起來會麻煩些需要取最新一條數(shù)據(jù)同時還要判斷該條數(shù)據(jù)是否已經(jīng)刪除,同時數(shù)據(jù)還得定期去重保留最后一條用來節(jié)省 ODPS 查詢成本(ODPS 是按照查詢數(shù)據(jù)量收費的)。

生產(chǎn)環(huán)境涉及到的實際問題,視頻課程、網(wǎng)上文章永遠(yuǎn)不會告訴你的(也可能我沒找到)。比如實時更新/刪除問題、數(shù)據(jù)質(zhì)量監(jiān)控問題、故障恢復(fù)重啟時候 Kafka offset 讀取位置問題、順序消費問題、流里一條數(shù)據(jù)跟業(yè)務(wù)庫表歷史數(shù)據(jù) join 問題等等,還有十幾張表數(shù)據(jù)混在一起表結(jié)構(gòu)、列內(nèi)容都不一樣程序代碼又該如何實現(xiàn)呢?

想到這些感覺真的無從下手,之前學(xué)的很多理論知識,還有網(wǎng)上的各種分享,這都無法解決我的問題。

沒辦法,只能硬著頭皮上。

方案一:Flink 讀取 Kafka 數(shù)據(jù) sink 到 Hbase。

Hbase 自動處理更新問題,刪除插入速度也很快,可以一條一條寫入,忙活了兩周終于寫完全部代碼并測試通過上線試運行了。

我把數(shù)據(jù)分析團(tuán)隊用到的其他數(shù)據(jù)也都導(dǎo)入到了 Hbase,再搭建個 Phoenix,最好再開發(fā)一套提交 SQL 的 Web 頁面就好了。

但很快問題來了:穩(wěn)定運行一周多后,Hbase 服務(wù)器磁盤滿了,經(jīng)查發(fā)現(xiàn)存儲開銷是正常預(yù)期的好多倍,相比 ODPS 這樣成本就太不劃算了。

方案二:Flink 讀取 Kafka 數(shù)據(jù) sink 到 ODPS。

經(jīng)咨詢 ODPS 的更新刪除功能今年三月份才上線,而且處于測試階段,生產(chǎn)當(dāng)然不能用,所以只能跟 DTS 一樣,數(shù)據(jù)源的刪除更新都新增一條數(shù)據(jù)做好標(biāo)記就好。

然后就開始在方案一基礎(chǔ)上修改代碼了,但一條一條插入性能太慢,后來又費老大勁改用批量插入。

方案三:Flink 讀取 Kafka 數(shù)據(jù) sink 到 ClickHouse。

這時候其他幾個問題基本都已解決,但之前的邏輯還都保持跟業(yè)務(wù)系統(tǒng)表一樣的表結(jié)構(gòu)sink到目標(biāo)數(shù)據(jù)庫。

走到這一步,我也算是有些實時 ETL 經(jīng)驗了,一開始遇到的很多問題也都解決掉了,但還有一個棘手的問題亟待解決:流里一條業(yè)務(wù)數(shù)據(jù)過來后要跟全量歷史維度數(shù)據(jù) join ,這該如何實現(xiàn)?

由于數(shù)據(jù)量有點大,所以考慮將維度表實時寫入 Redis 或 Hbase,遇到業(yè)務(wù)表時候?qū)崟r根據(jù)主鍵過去實時查詢即可。

哈哈,到這里,基本上滿足需求了,下一步就是性能優(yōu)化了,但是對于 Flink 還有別的可選方式,比如 Flink CDC、FLink SQL。

最后,給大家分享幾張 Web UI 截圖:

 

責(zé)任編輯:武曉燕 來源: 數(shù)倉與大數(shù)據(jù)
相關(guān)推薦

2023-11-02 08:27:29

2020-08-10 11:20:59

索引MySQL數(shù)據(jù)庫

2021-05-27 20:56:51

esbuild 工具JavaScript

2021-05-29 06:23:47

webpack esbuild

2020-11-05 10:57:47

云計算多云公有云

2019-01-14 07:28:56

大數(shù)據(jù)云計算互聯(lián)網(wǎng)

2012-02-28 09:11:51

語言Lua

2020-07-17 14:06:36

Scrum敏捷團(tuán)隊

2012-04-04 22:07:12

Android

2020-11-17 10:10:45

程序員技能開發(fā)者

2013-10-22 15:18:19

2014-01-09 09:24:40

2020-03-30 16:45:06

代碼看不懂

2012-11-14 20:55:07

容錯服務(wù)器選型CIO

2012-06-18 14:51:09

Python

2014-01-17 14:39:18

12306 搶票

2015-03-02 15:13:52

Apple Watch

2014-09-22 10:06:07

2019-09-17 15:30:13

Java編程語言

2015-06-04 11:22:22

前端程序員
點贊
收藏

51CTO技術(shù)棧公眾號