2022年首發|大資料專家級技能模型與學習指南

語言: CN / TW / HK

整篇文章約2.5萬字(不包含引用和連線內容)。如果這個文章對你有幫助,不要忘記  「在看」 「點贊」 「收藏」  。

  • 本文的行文思路

  • 第一部分:學習路徑概覽

    • 1. 程式語言(:star:️:star:️:star:️:star:️:star:️)

    • 2. Linux基礎(:star:️:star:️:star:️:star:️:star:️)

    • 3. 資料庫入門(:star:️:star:️:star:️:star:️:star:️)

    • 4. 計算機基礎(:star:️:star:️:star:️:star:️:star:️)

    • 5. Java基礎(:star:️:star:️:star:️:star:️:star:️)

    • 6. 分散式理論篇(:star:️:star:️:star:️:star:️)

    • 7. 網路通訊篇(:star:️:star:️:star:️:star:️)

    • 8. 離線計算篇(:star:️:star:️:star:️:star:️:star:️)

    • 9. 訊息佇列篇(:star:️:star:️:star:️:star:️:star:️)

    • 10. 實時計算篇(:star:️:star:️:star:️:star:️:star:️)

    • 11. 資料排程/治理/血緣等(:star:️:star:️:star:️:star:️)

    • 12. 資料倉庫&資料湖(:star:️:star:️:star:️:star:️)

    • 13. OLAP篇(:star:️:star:️:star:️:star:️)

    • 14. 演算法篇(:star:️:star:️:star:️)

    • 15. 不可缺少的後端技能(:star:️:star:️:star:️:star:️)

    • 16.業務(:star:️:star:️:star:️:star:️:star:️)

  • 第二部分:學習路徑拆分篇

    • 1. 語言基礎篇(:star:️:star:️:star:️:star:️:star:️)

    • 2. Linux基礎(:star:️:star:️:star:️:star:️)

    • 3. 分散式理論篇(:star:️:star:️:star:️:star:️)

    • 4. 網路通訊Netty(:star:️:star:️:star:️:star:️)

    • 5.離線計算(:star:️:star:️:star:️:star:️:star:️)

    • 6.訊息佇列(:star:️:star:️:star:️:star:️:star:️)

    • 7.實時計算篇(:star:️:star:️:star:️:star:️:star:️)

    • 8. 資料排程/資料交換/資料治理、血緣等(:star:️:star:️:star:️:star:️)

    • 9.資料倉庫&資料湖(:star:️:star:️:star:️:star:️)

    • 10.OLAP篇(:star:️:star:️:star:️:star:️)

    • 11. 演算法篇(:star:️:star:️:star:️)

    • 12.不可缺少的後端技能(:star:️:star:️:star:️:star:️)

  • 第三部分:影片/書籍推薦篇

    • B站資源彙總

      • 語言基礎篇

      • 資料結構篇

      • Linux基礎

      • 資料庫入門

      • 計算機基礎

      • 分散式理論

      • Netty與網路通訊

    • 框架篇

      • Hadoop

      • Hive

      • Hbase

      • Kafka

      • Spark

      • Flink

    • 專案實戰篇

    • 雲棲社群

      • 關鍵用法

      • 電子書區

      • 產品討論(問答區)

      • 學習路線&進階區

      • 公開課

      • 活動&訓練營

      • 熱門技術圈

      • 總結

  • 第四部分:未來趨勢篇

    • 近實時架構興起

    • 資料共享與隱私保護成為熱點

    • IoT成為熱點

    • AI for System

    • 雲原生和圖計算

  • 第五部分:面試&建議

    • 校招面試

    • 社招同學看這裡

  • 第六部分:其他

  • 總結

這篇文章從構思到最終成文,經過無數次的修改和校對,終於面世。

我在寫完此文的時候,窗外已經大亮。2022年正迎面走來,也代表著我從事大資料開發領域的第五個年頭迎面走來。

文章也僅僅是站在我從業4年多的時間點,基於 我過去經歷的總結以及對行業未來的思考 ,向大家展示一個我認為 「比較全面」「比較合理」「未來天花板比較高」 的技術棧模型。如果你有更好的建議,歡迎給我留言。

本文的行文思路

本文的行文思路和之前類似但是有一些區別,分別從以下幾個方面:

  • 第一部分:學習路徑概覽篇

  • 第二部分:學習路徑拆分篇

  • 第三部分:影片/書籍推薦篇

  • 第四部分:未來趨勢篇

  • 第五部分:面試&建議

  • 第六部分:其他

上面的每個部分會對之前的內容進行刪減,有一些比較大的改動,另外根據資料開發領域的最新發展趨勢給出了一些非常有潛力的技能點。

我對每個技能點都給出了評級, 五星最高,一星最低

第一部分:學習路徑概覽

1. 程式語言(:star:️:star:️:star:️:star:️:star:️)

計算機專業的同學的第一門語言大都是C語言,然後是面向物件的Java。除此之外,可以學習Scala和Python。

Java是大資料領域的屠龍刀,適合集團化大規模作戰。對Java的要求沒有上限,越熟悉越好。Python更像一把鋒利的匕首,更適用於短兵相接和貼身肉搏,用來寫各種指令碼。

另外,這裡特別提醒大家對於Go這門語言的關注。隨著雲原生的發展,Java正受到Go、Rust等新興語言的挑戰,部分元件因為Cloud Native的發展可能在某一個領域會被慢慢替換掉。例如大名鼎鼎的Logstash,因為資源佔用的原因,被Elstaic.co用Golang的Filebeat代替了Shipper部分的職能。

2. Linux基礎(:star:️:star:️:star:️:star:️:star:️)

需要掌握基於Linux系統下的常用命令和常見問題診斷。

3. 資料庫入門(:star:️:star:️:star:️:star:️:star:️)

基於MySQL瞭解常見的SQL語法,大資料領域SQL化是未來的發展方向。

4. 計算機基礎(:star:️:star:️:star:️:star:️:star:️)

計算機網路,作業系統,資料結構和演算法,計算機組成原理。

四門專業課,也是校招面試時的重點。

5. Java基礎(:star:️:star:️:star:️:star:️:star:️)

  • 語言基礎

  • 多執行緒

  • 併發包中常用的併發容器(J.U.C)

  • JVM

  • NIO

  • RPC

6. 分散式理論篇(:star:️:star:️:star:️:star:️)

  • 分散式中的一些基本概念:叢集(Cluster)、負載均衡(Load Balancer)等

  • 分散式系統理論基礎:一致性、2PC 和 3PC

  • 分散式系統理論基礎:CAP

  • 分散式系統理論基礎:時間、時鐘和事件順序

  • 分散式系統理論進階:Paxos

  • 分散式系統理論進階:Raft、Zab

  • 分散式系統理論進階:選舉、多數派和租約

  • 分散式鎖的解決方案

  • 分散式事務的解決方案

  • 分散式 ID 生成器解決方案

這部分內容是很多做底層開發同學會接觸到的東西,如果你作為偏業務的開發去看一些原始碼或者比較有深度的論文,這部分的內容也是你一定要掌握的。

7. 網路通訊篇(:star:️:star:️:star:️:star:️)

  • 網路協議

  • I/O模型:BIO/AIO/NIO

  • Netty框架

    • Netty 三層網路架構:Reactor 通訊排程層、職責鏈 PipeLine、業務邏輯處理層

    • Netty 的執行緒排程模型

    • 序列化方式

    • 鏈路有效性檢測

    • 流量整形

    • 優雅停機策略

    • Netty 對 SSL/TLS 的支援 等等

8. 離線計算篇(:star:️:star:️:star:️:star:️:star:️)

  • MapReduce

  • HDFS

  • YARN

  • Hive

  • Hbase

9. 訊息佇列篇(:star:️:star:️:star:️:star:️:star:️)

  • Kafka

  • Pulsar

10. 實時計算篇(:star:️:star:️:star:️:star:️:star:️)

  • Flink

  • Spark

11. 資料排程/治理/血緣等(:star:️:star:️:star:️:star:️)

  • Dolphin Scheduler

  • 資料治理體系

  • 資料血緣儲存和分析

12. 資料倉庫&資料湖(:star:️:star:️:star:️:star:️)

  • 數倉理論:正規化、分層模型等

  • 資料倉庫常見的問題:資料治理、元資料管理等

  • 資料湖理論和架構、用到的框架(Hudi、IceBerg)等

13. OLAP篇(:star:️:star:️:star:️:star:️)

常見的OLAP資料庫,這個部分因個人而異,看個人業務用到OLAP庫,包括不限於:

  • Hive、Hawq、Impala:基於 SQL on Hadoop

  • Presto 和 Spark SQL 類似:基於記憶體解析 SQL 生成執行計劃

  • Kylin:用空間換時間、預計算

  • Druid:資料實時攝入加實時計算

  • ClickHouse:OLAP領域的HBase,單表查詢效能優勢巨大

  • Greenpulm:OLAP領域的PostgreSQL

當然還有類似Doris等等這樣的資料庫供你選擇。

14. 演算法篇(:star:️:star:️:star:️)

  • 常見的大資料領域的演算法:倒排、TopN、布隆過濾、字典樹等

  • 瞭解常見的機器學習演算法

  • 瞭解演算法工程化

15. 不可缺少的後端技能(:star:️:star:️:star:️:star:️)

  • Spring

  • Mybatis

  • SpringBoot ...

以及後端常見的一些介面抽象、分層設計和架構設計(DDD領域驅動,MVC等)。

16.業務(:star:️:star:️:star:️:star:️:star:️)

基於當前業務的技術選型、成本控制、ROI投入產出比。在鑽研技術的同時深入瞭解業務,建立自己的競爭優勢和壁壘。

第二部分:學習路徑拆分篇

1. 語言基礎篇(:star:️:star:️:star:️:star:️:star:️)

Java語言基礎(:star:️:star:️:star:️:star:️:star:️)

  • Java 的面向物件

  • Java 語言的三大特徵:封裝、繼承和多型

  • Java 語言資料型別

  • Java 的自動型別轉換,強制型別轉換

  • Java 語言中的關鍵字:final、static、transient、instanceof、volatile、synchronized的底層原理

  • Java 中常用的集合類的實現原理:ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap互相的區別以及底層實現原理

  • 列舉

  • IO

  • 反射

  • 註解

  • Lambda表示式

  • 動態代理

鎖(:star:️:star:️:star:️:star:️:star:️)

  • CAS、樂觀鎖與悲觀鎖、資料庫相關鎖機制、分散式鎖、偏向鎖、輕量級鎖、重量級鎖、monitor

  • 鎖優化、鎖消除、鎖粗化、自旋鎖、可重入鎖、阻塞鎖、死鎖

  • 死鎖的原因和解決辦法

  • CountDownLatch、CyclicBarrier 和 Semaphore 三個類的使用和原理

多執行緒(:star:️:star:️:star:️:star:️:star:️)

  • 併發和並行的區別

  • 執行緒與程序的區別

  • 執行緒的實現、執行緒的狀態、優先順序、執行緒排程、建立執行緒的多種方式、守護執行緒

  • 自己設計執行緒池、submit() 和 execute()、執行緒池原理

  • 為什麼不允許使用 Executors 建立執行緒池

  • 死鎖、死鎖如何排查、執行緒安全和記憶體模型的關係

  • ThreadLocal變數

  • Executor建立執行緒池的方式:

  • ThreadPoolExecutor建立執行緒池、拒絕策略

  • 執行緒池關閉的方式

跟執行緒安全相關:

  • 執行緒安全

  • 多級快取和一致性

  • CPU的時間片和原子性

  • 指令重排序

  • 記憶體模型

  • Happens-before

  • as-if-serial

併發(:star:️:star:️:star:️:star:️:star:️)

  • 同步容器與併發容器(:star:️:star:️:star:️:star:️)

JUC 包中 List 介面的實現類:CopyOnWriteArrayList
JUC 包中 Set 介面的實現類:CopyOnWriteArraySet、ConcurrentSkipListSet
JUC 包中 Map 介面的實現類:ConcurrentHashMap、ConcurrentSkipListMap
JUC包中Queue介面的實現類:ConcurrentLinkedQueue、ConcurrentLinkedDeque、ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque
  • Thread(:star:️:star:️:star:️:star:️:star:️)

  • Runnable&Callable(:star:️:star:️:star:️:star:️:star:️)

  • ReentrantLock(:star:️:star:️:star:️:star:️:star:️)

  • ReentrantReadWriteLock(:star:️:star:️:star:️:star:️:star:️)

  • Atomic包(:star:️:star:️:star:️:star:️)

  • Semaphore(:star:️:star:️:star:️:star:️)

  • CountDownLatch(:star:️:star:️:star:️:star:️)

  • ConcurrentHashMap(:star:️:star:️:star:️:star:️:star:️)

  • Executors(:star:️:star:️:star:️:star:️:star:️)

JVM(:star:️:star:️:star:️:star:️:star:️)

  • JVM記憶體結構

  • 堆和棧

  • Java記憶體模型

  • 垃圾回收

GC演算法:標記清除、引用計數、複製、標記壓縮、分代回收、增量式回收
GC引數
垃圾收集器(CMS、G1、ZGC、Epsilon)
物件存活的判定
  • JVM引數及調優

  • JAVA物件模型

  • 虛擬機器效能監控與故障處理工具

  • 即時編譯器、編譯優化

  • 類載入機制

  • 虛擬機器效能監控與故障處理工具

jps
jstack
jmap
jstat
jconsole
jinfo
jhat
javap
btrace
TProfiler
jlink
Arthas

NIO(:star:️:star:️:star:️:star:️)

  • 使用者空間以及核心空間

  • Linux 網路 I/O 模型:阻塞 I/O (Blocking I/O)、非阻塞 I/O (Non-Blocking I/O)、I/O 複用(I/O Multiplexing)、訊號驅動的 I/O (Signal Driven I/O)、非同步 I/O

  • 靈拷貝(ZeroCopy)

  • BIO、AIO、NIO 對比

  • 緩衝區 Buffer

  • 通道 Channel

  • 反應堆 Reactor

  • 選擇器 Selector

  • epoll

RPC(:star:️:star:️:star:️:star:️)

  • RPC 的原理程式設計模型

  • 常用的 RPC 框架:Thrift、Dubbo、SpringCloud

  • RPC 的應用場景和與訊息佇列的差別

  • RPC 核心技術點:服務暴露、遠端代理物件、通訊、序列化

2. Linux基礎(:star:️:star:️:star:️:star:️)

  • 基本指令

  • 系統和網路命令

  • 許可權模型

  • 基礎的Shell指令碼

3. 分散式理論篇(:star:️:star:️:star:️:star:️)

和上面內容保持一致。

  • 分散式中的一些基本概念:叢集(Cluster)、負載均衡(Load Balancer)等

  • 分散式系統理論基礎:一致性、2PC 和 3PC

  • 分散式系統理論基礎:CAP

  • 分散式系統理論基礎:時間、時鐘和事件順序

  • 分散式系統理論進階:Paxos

  • 分散式系統理論進階:Raft、Zab

  • 分散式系統理論進階:選舉、多數派和租約

  • 分散式鎖的解決方案

  • 分散式事務的解決方案

  • 分散式ID生成器解決方案

4. 網路通訊Netty(:star:️:star:️:star:️:star:️)

Netty 是當前最流行的 NIO 框架,Netty 在網際網路領域、大資料分散式計算領域、遊戲行業、通訊行業等獲得了廣泛的應用,業界著名的開源元件只要涉及到網路通訊,Netty 是最佳的選擇之一。

關於 Netty 我們要掌握:

  • Netty 三層網路架構:Reactor通訊排程層、職責鏈PipeLine、業務邏輯處理層

  • Netty 的執行緒排程模型

  • Netty的核心元件:

  Channel
  EventLoop
  ChannelFuture
  EventLoopGroup
  ChannelHandler
  ChannelPipeLine
  ChannelHandlerContext
  • ByteBuf

  • TCP/IP粘包拆包

  • 編/解碼器

  • 零拷貝、記憶體池設計

5.離線計算(:star:️:star:️:star:️:star:️:star:️)

Hadoop 體系是我們學習大資料框架的基石,尤其是 MapReduce、HDFS、Yarn 三駕馬車基本墊定了整個資料方向的發展道路。也是後面我們學習其他框架的基礎,關於 Hadoop 本身我們應該掌握哪些呢?

MapReduce

  • 掌握 MapReduce 的工作原理

  • 能用 MapReduce 手寫程式碼實現簡單的 WordCount 或者 TopN 演算法

  • 掌握 MapReduce Combiner 和 Partitioner的作用

  • 熟悉 Hadoop 叢集的搭建過程,並且能解決常見的錯誤

  • 熟悉 Hadoop 叢集的擴容過程和常見的坑

  • 如何解決 MapReduce 的資料傾斜

  • Shuffle 原理和減少 Shuffle 的方法

HDFS

  • 十分熟悉 HDFS 的架構圖和讀寫流程

  • 十分熟悉 HDFS 的配置

  • 熟悉 DataNode 和 NameNode 的作用

  • NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的作用的場景

  • HDFS 操作檔案的常用命令

  • HDFS 的安全模式

Yarn

  • Yarn 的產生背景和架構

  • Yarn 中的角色劃分和各自的作用

  • Yarn 的配置和常用的資源排程策略

  • Yarn 任務資源排程的過程

Hadoop3.0新特性

  • Erasure Coding

  • HDFS資料冗餘儲存策略

這些新特性需要你瞭解。

1. 最低要求的Java版本從Java 7增加到Java 8
現在,已針對Java 8的執行時版本編譯了所有Hadoop JAR。仍在使用Java 7或更低版本的使用者必須升級到Java 8。

2. 支援HDFS中的糾刪碼
糾刪碼是一種持久儲存資料的方法,可節省大量空間。與標準HDFS副本機制的3倍開銷相比,像Reed-Solomon(10,4) 這樣的標準編碼的空間開銷是1.4倍。

由於糾刪碼在重建期間會帶來額外的開銷,並且大多數情況下會執行遠端讀取,因此傳統上已將其用於儲存較冷,訪問頻率較低的資料。

在部署此功能時應考慮糾刪碼機制的網路和CPU開銷。

3. Shell指令碼重寫
Hadoop Shell指令碼已被重寫,以修復許多長期存在的錯誤幷包括一些新功能。Hadoop的開發人員儘管一直在尋求相容性,但是某些更改可能會破壞現有的安裝。

4. MapReduce 任務本地優化
MapReduce 增加了對 map output 收集器的本地執行的支援,對於 shuffle 密集型工作,這可以使效能提高30%或更多。

5. 支援兩個以上的 NameNode
在之前的版本中,HDFS的高可用最多支援兩個NameNode。在HDFS 3.x 版本中,通過將編輯複製到法定數量的三個JournalNode,該體系結構能夠容忍系統中任何一個節點的故障。
但是,某些部署需要更高的容錯度。這個新特性啟用了這一點,該功能允許使用者執行多個備用NameNode。例如,通過配置三個NameNode和五個JournalNode,群集可以忍受兩個節點的故障,而不僅僅是一個節點的故障。

6. 多個服務的預設埠已更改
以前,多個Hadoop服務的預設埠在Linux臨時埠範圍內(32768-61000)。這意味著在啟動時,服務有時會由於與另一個應用程式的衝突而無法繫結到埠。
這些衝突的埠已移出臨時範圍,具體的埠更改如下:
NameNode 的埠: 50070 --> 9870, 8020 --> 9820, 50470 --> 9871;
Secondary NameNode 的埠: 50091 --> 9869, 50090 --> 9868;
DataNode 的埠: 50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864;
Hadoop KMS 的埠: 16000 --> 9600(HBase的HMaster埠號與Hadoop KMS埠號衝突。兩者都使用16000,因此 Hadoop KMS 更改為9600)。

7. 支援Microsoft Azure資料湖和阿里雲物件儲存系統檔案系統聯結器
Hadoop現在支援與Microsoft Azure資料湖和Aliyun物件儲存系統整合,作為與Hadoop相容的替代檔案系統。

8. 資料內節點平衡器
單個DataNode可管理多個磁碟。在正常的寫操作過程中,磁碟將被均勻填充。但是,新增或替換磁碟可能會導致DataNode內部出現嚴重偏差。原有的HDFS平衡器無法處理這種情況。新版本的HDFS中有平衡功能處理,該功能通過hdfs diskbalancer CLI呼叫。

9. 基於HDFS路由器的聯合
基於HDFS路由器的聯合添加了一個RPC路由層,該層提供了多個HDFS名稱空間的聯合檢視。這簡化了現有HDFS客戶端對聯合群集的訪問。

10. YARN資源型別
YARN資源模型已被通用化,以支援使用者定義的CPU和記憶體以外的可計數資源型別。例如,叢集管理員可以定義資源,例如GPU,軟體許可證或本地連線的儲存。然後可以根據這些資源的可用性來排程YARN任務。

Hive

Hive 是一個數據倉庫基礎工具,在 Hadoop 中用來處理結構化資料。它架構在 Hadoop 之上,總歸為大資料,並使得查詢和分析方便。Hive 是應用最廣泛的 OLAP 框架。Hive SQL 也是我們進行 SQL 開發用的最多的框架。

關於 Hive 你必須掌握的知識點如下:

  • HiveSQL原理和引擎:MapRuce、Tez、Spark

  • Hive 和普通關係型資料庫有什麼區別

  • Hive 支援哪些資料格式

  • Hive 在底層是如何儲存 NULL 的

  • HiveSQL 支援的幾種排序各代表什麼意思(Sort By/Order By/Cluster By/Distrbute By)

  • Hive 的動態分割槽

  • HQL 和 SQL 有哪些常見的區別

  • Hive 中的內部表和外部表的區別

  • Hive 表進行關聯查詢如何解決長尾和資料傾斜問題

  • HiveSQL 的優化(系統引數調整、SQL語句優化)

列式資料庫 Hbase

我們在提到列式資料庫這個概念的時候,第一反應就是 Hbase。

HBase 本質上是一個數據模型,類似於谷歌的大表設計,可以提供快速隨機訪問海量結構化資料。它利用了 Hadoop 的檔案系統(HDFS)提供的容錯能力。它是 Hadoop 的生態系統,提供對資料的隨機實時讀/寫訪問,是 Hadoop 檔案系統的一部分。

我們可以直接或通過 HBase 的儲存 HDFS 資料。使用 HBase 在 HDFS 讀取消費/隨機訪問資料。HBase 在 Hadoop 的檔案系統之上,並提供了讀寫訪問。

HBase 是一個面向列的資料庫,在表中它由行排序。表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每一個列族可以有任意數量的列。後續列的值連續地儲存在磁碟上。

表中的每個單元格值都具有時間戳。總之,在一個 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是鍵值對的集合。

關於 Hbase 你需要掌握:

  • Hbase 的架構和原理

  • Hbase 的讀寫流程

  • Hbase 有沒有併發問題?Hbase 如何實現自己的 MVVC 的?

  • Hbase 中幾個重要的概念:HMaster、RegionServer、WAL機制、MemStore

  • Hbase 在進行表設計過程中如何進行列族和 RowKey 的設計

  • Hbase 的資料熱點問題發現和解決辦法

  • 提高 Hbase 的讀寫效能的通用做法

  • HBase 中 RowFilter 和 BloomFilter 的原理

  • Hbase API 中常見的比較器

  • Hbase 的預分割槽

  • Hbase 的 Compaction

  • Hbase 叢集中 HRegionServer 宕機如何解決

  • Hbase中的重要資料結構:LSM樹、SkipList、布隆過濾器

6.訊息佇列(:star:️:star:️:star:️:star:️:star:️)

Kafka(:star:️:star:️:star:️:star:️:star:️)

Kafka 是最初由 Linkedin 公司開發,是一個分散式、支援分割槽的(partition)、多副本的(replica)的分散式訊息系統,它的最大的特性就是可以實時的處理大量資料以滿足各種需求場景:比如基於 Hadoop 的批處理系統、低延遲的實時系統、Spark 流式處理引擎,Nginx 日誌、訪問日誌,訊息服務等等,用 Scala 語言編寫,Linkedin 於 2010 年貢獻給了 Apache 基金會併成為頂級開源專案。

Kafka 或者類似 Kafka 各個公司自己造的訊息'輪子'已經是大資料領域訊息中介軟體的事實標準。Kafka 不滿足單純的訊息中介軟體,也正朝著平臺化的方向演進。

關於 Kafka 我們需要掌握:

  • Kafka 的特性和使用場景

  • Kafka 中的一些概念:Leader、Broker、Producer、Consumer、Topic、Group、Offset、Partition、ISR

  • Kafka 的整體架構

  • Kafka 選舉策略

  • Kafka 讀取和寫入訊息過程中都發生了什麼

  • Kakfa 如何進行資料同步(ISR)

  • Kafka 實現分割槽訊息順序性的原理

  • 消費者和消費組的關係

  • 消費 Kafka 訊息的 Best Practice(最佳實踐)是怎樣的

  • Kafka 如何保證訊息投遞的可靠性和冪等性

  • Kafka 訊息的事務性是如何實現的

  • 如何管理 Kafka 訊息的 Offset

  • Kafka 的檔案儲存機制

  • Kafka 是如何支援 Exactly-once 語義的

  • 通常 Kafka 還會要求和 RocketMQ 等訊息中介軟體進行比較

Pulsar(:star:️:star:️:star:️)

  • Pulsar的核心概念

Topic
Bookie
Broker
Entry
Ledger
MetaData Storage
Journal
等等
  • Pulsar的關鍵特性

跨地域複製( geo-replication),單個例項原生支援多個叢集(跨叢集複製)
極低的釋出延遲和端到端延遲
可無縫擴充套件到超過一百萬個 topic
簡單的客戶端API,支援Java、Go、Python和C++
支援多種topic訂閱模式:獨佔訂閱、共享訂閱、故障轉移訂閱、鍵共享(exclusive, shared, failover, key_shared)
通過 Apache BookKeeper 提供的持久化訊息儲存機制保證訊息傳遞
由輕量級的無伺服器(serverless )計算框架 Pulsar Functions 實現流原生的資料處理
基於 Pulsar Functions 的無伺服器聯結器框架 Pulsar IO 使得資料更易移入、移出 Apache Pulsar
分層式儲存可在資料陳舊時,將資料從熱儲存解除安裝到冷/長期儲存(如S3、GCS)中
  • Pulsar的架構設計

一個Pulsar例項由一個或多個Pulsar叢集組成。例項中的叢集可以在它們之間複製資料。一個Pulsar cluster由三部分組成:

一個或者多個 broker :負責處理和負載均衡 producer 發出的訊息,並將這些訊息分派給 consumer;Broker 與 Pulsar 配置儲存互動來處理相應的任務,並將訊息儲存在 BookKeeper 例項中(又稱 bookies);Broker 依賴 ZooKeeper 叢集處理特定的任務;
一個BookKeeper:包含一個或多個 bookie 的 BookKeeper 叢集負責訊息的持久化儲存;
一個ZooKeeper:特定於某個Pulsar叢集的ZooKeeper叢集處理Pulsar叢集之間的協調任務。

7.實時計算篇(:star:️:star:️:star:️:star:️:star:️)

  • Spark

Spark 是專門為大資料處理設計的通用計算引擎,是一個實現快速通用的叢集計算平臺。它是由加州大學伯克利分校 AMP 實驗室開發的通用記憶體平行計算框架,用來構建大型的、低延遲的資料分析應用程式。它擴充套件了廣泛使用的 MapReduce 計算模型。高效的支撐更多計算模式,包括互動式查詢和流處理。Spark 的一個主要特點是能夠在記憶體中進行計算,即使依賴磁碟進行復雜的運算,Spark 依然比 MapReduce 更加高效。

Spark 生態包含了:Spark Core、Spark Streaming、Spark SQL、Structured Streming 和機器學習相關的庫等。

學習 Spark 我們應該掌握:

Spark Core(:star:️:star:️:star:️:star:️:star:️)

  • Spark的叢集搭建和叢集架構(Spark 叢集中的角色)

  • Spark Cluster 和 Client 模式的區別

  • Spark 的彈性分散式資料集 RDD

  • Spark DAG(有向無環圖)

  • 掌握 Spark RDD 程式設計的運算元 API(Transformation 和 Action 運算元)

  • RDD 的依賴關係,什麼是寬依賴和窄依賴

  • RDD 的血緣機制

  • Spark 核心的運算機制

  • Spark 的 CheckPoint 和容錯

  • Spark 的通訊機制

  • Spark Shuffle 原理和過程

  • Spark Streaming

  • 原理剖析(原始碼級別)和執行機制

  • Spark Dstream 及其 API 操作

  • Spark Streaming 消費 Kafka 的兩種方式

  • Spark 消費 Kafka 訊息的 Offset 處理

  • 資料傾斜的處理方案

  • Spark Streaming 的運算元調優

  • 並行度和廣播變數

  • Shuffle 調優

Spark SQL(:star:️:star:️:star:️:star:️:star:️)

  • Spark SQL 的原理和執行機制

  • Catalyst 的整體架構

  • Spark SQL 的 DataFrame

  • Spark SQL 的優化策略:記憶體列式儲存和記憶體快取表、列儲存壓縮、邏輯查詢優化、Join 的優化

  • Catalyst、Tunsten

Structured Streaming、Spark Streaming(:star:️:star:️:star:️:star:️)

這兩塊部分優先順序有所降低,因為Flink社群的蓬勃發展,基於Flink的大資料實時計算技術棧未來會是第一選擇。

Spark 從 2.3.0 版本開始支援 Structured Streaming,它是一個建立在 Spark SQL 引擎之上可擴充套件且容錯的流處理引擎,統一了批處理和流處理。正是 Structured Streaming 的加入使得 Spark 在統一流、批處理方面能和 Flink 分庭抗禮。

我們需要掌握:

  • Structured Streaming 的模型

  • Structured Streaming 的結果輸出模式

  • 事件時間(Event-time)和延遲資料(Late Data)

  • 視窗操作

  • 水印

  • 容錯和資料恢復

Spark Mlib、GraphX(:star:️:star:️:star:️)

本部分是 Spark 對機器學習支援的部分,我們學有餘力的同學可以瞭解一下 Spark 對常用的分類、迴歸、聚類、協同過濾、降維以及底層的優化原語等演算法和工具。可以嘗試自己使用 Spark Mlib 做一些簡單的演算法應用。

  • Flink

Flink目前已經成為大資料實時計算領域的第一選擇,基於Flink及周邊設施的建設也在越來越完善中。

那麼關於 Flink 這個框架我們應該掌握哪些核心知識點?

  • Flink 叢集的搭建

  • Flink 的架構原理

  • Flink 的程式設計模型

  • Flink 叢集的 HA 配置

  • Flink DataSet 和 DataSteam API

  • 序列化

  • Flink 累加器

  • 狀態 State 的管理和恢復

  • 視窗和時間

  • 並行度

  • Flink 和訊息中介軟體 Kafka 的結合

  • Flink Table 和 SQL 的原理和用法

  • Flink CDC

  • Flink和其他框架的Connector的原理和使用

  • Flink SQL中常見的問題

8. 資料排程/資料交換/資料治理、血緣等(:star:️:star:️:star:️:star:️)

資料任務排程

老牌排程框架Oozie、Azkaban、Airflow應用廣泛,基於當前公司技術平臺的選型情況掌握。

這裡我要著重提一下Apache DolphinScheduler這個框架,這個框架為國內開源專案,相對其他國外專案,有天然的本土優勢,如果你還沒有接觸過任務排程框架,可以直接學習DolphinScheduler這個框架。

資料交換

Kettle、DataX、Streamsets、SeaTunnel等異構資料交換工具,可以根據自己的業務需要選擇一種學習和掌握。

資料治理

資料治理是這兩年資料領域興起的一個小方向,尤其是一些傳統企業在做數字化轉型過程中需要很多懂資料治理的人才。

你應該懂的內容包含:

  • 資料治理的業務標準、技術標準、資料安全標準等

  • 架構治理、模型治理、元資料治理

  • 元資料採集、元模型構建、元資料服務、元資料應用

  • 資料地圖、資料視覺化、資料質量監控

這部分內容大家可以直接參考阿里的OneData理論進行學習。

  • 第一部分:OneModel 致力於實現資料的標準與統一。

  • 第二部分:OneID 致力於實現實體的統一,讓資料融通而非以孤島存在,為精準的使用者畫像提供基礎。

  • 第三部分:OneService 致力於實現資料服務統一,讓資料複用而非複製。

9.資料倉庫&資料湖(:star:️:star:️:star:️:star:️)

離線資料倉庫

你需要掌握:

  1. 資料模型架構原則

  • 數倉分層原則

  • 主題域劃分原則

  • 資料模型設計原則

  1. 數倉公共開發規範

  • 層次呼叫規範

  • 資料型別規範

  • 資料冗餘規範

  • NULL欄位處理規範

  • 指標口徑規範

  • 資料表處理規範

  • 表的生命週期管理

  1. 數倉各層開發規範

  • ODS層設計規範

  • 公共維度層設計規範

  • DWD明細層設計規範

  • DWS公共彙總層設計規範

  1. 數倉命名規範

  • 詞根設計規範

  • 表命名規範

  • 指標命名規範

實時資料倉庫

  • 實時資料倉庫架構選型:Lambda、Kappa、流批一體

  • 實時資料體系架構分層

  • 實時資料體系技術選型:接入、儲存、計算、服務、應用

  • 實時資料模型分層

資料湖

資料湖與資料倉庫借鑑融合

資料倉庫的高效能與管理能力,與資料湖的靈活性,倉和湖的兩套體系在相互借鑑與 融合。在2020年各大公司分別提出湖倉一體架構,成為當下架構演進最熱的趨勢。但湖倉一體架構有多種形態,不同形態尚在演進和爭論中。

這部分設計到Format層的資料選型包含:Hudi、IceBerg、Delta三個主要的框架。大家可以根據公司需要選擇學習。

10.OLAP篇(:star:️:star:️:star:️:star:️)

常見的OLAP資料庫,這個部分因個人而異,看個人業務用到OLAP庫,包括不限於:

  • Hive、Hawq、Impala:基於 SQL on Hadoop

  • Presto 和 Spark SQL 類似:基於記憶體解析 SQL 生成執行計劃

  • Kylin:用空間換時間、預計算

  • Druid:資料實時攝入加實時計算

  • ClickHouse:OLAP領域的HBase,單表查詢效能優勢巨大

  • Greenpulm:OLAP領域的PostgreSQL

包括如果你要做搜尋還可能用到ElasticSearch這樣的框架,根據個人業務需要學習。

11. 演算法篇(:star:️:star:️:star:️)

  • 常見的大資料領域的演算法:倒排、TopN、布隆過濾、字典樹等

  • 瞭解常見的機器學習演算法

  • 瞭解演算法工程化

12.不可缺少的後端技能(:star:️:star:️:star:️:star:️)

  • Spring

  • Mybatis

  • SpringBoot

  • 常見的設計模式

以及後端常見的一些介面抽象、分層設計和架構設計(DDD領域驅動,MVC等)。

第三部分:影片/書籍推薦篇

這部分就是我之前寫的B站資源和雲棲社群資源合集。稍有改動。

B站資源彙總

語言基礎篇

關於程式語言這部分,大部分同學都是Java附帶Scala技能加點,當然如果你學了一點Python的東西也是一個加分項。

那麼關於Java語言你可以參考下面這個影片,尤其是如果你的語言基礎極差,都沒有用過Java語言。

《Java基礎到高階-宋紅康》 http://www.bilibili.com/video/BV1Qb411g7cz

如果你有一定的語言基礎,想看看自己掌握到了什麼程度?OK,下面這個影片就滿足你的胃口了。這個影片從關鍵字到新特性,帶著問題的形式,邊學邊考。

《最全Java零基礎入門教程(含百道Java真題)》 http://www.bilibili.com/video/BV1Kb411W75N

資料結構篇

如果你還在讀書,結合課本來看,我推薦這個:

《資料結構-浙江大學》 http://www.bilibili.com/video/BV1JW411i731

浙江大學老師的這個影片可以說是公開課的牌面了,可以稱為資料結構篇的「正規軍」了。

與之對應的是,下面這個影片。如果你工作有一段時間了,那麼可以直接看這個影片:

《資料結構與演算法(小甲魚)》 http://www.bilibili.com/video/av29175690

小甲魚簡直可以稱為良心UP主的楷模。小甲魚的影片語言風趣幽默,舉了很多的例子配合知識點。

Linux基礎

Linux基礎這塊對於資料開發非常重要,因為大家平時接觸過的資料框架的搭建過程涉及大量的Linux命令操作,並且在系統級別的調優還會接觸atime、ulimit這種比較高階的命令。

這裡我推薦史上最牛的Linux影片教程:

《史上最牛的Linux影片教程—兄弟連》 http://www.bilibili.com/video/av18156598

如果這個影片滿足不了你,你還可以參考:

《Linux教程(千萬級學習人次)》 http://www.bilibili.com/video/av21303002

資料庫入門

基於MySQL瞭解常見的SQL語法,大資料領域SQL化是未來的發展方向。

《MySQL 基礎+高階篇》 http://www.bilibili.com/video/av49181542

以及下面這個:

《MySQL最新教程通俗易懂》 http://www.bilibili.com/video/BV1NJ411J79W

計算機基礎

作業系統

這裡B站是萬能的,但是我還給出了一些其他的連結:

學堂在線上清華的作業系統 http://www.xuetangx.com/course/THU08091000267/5883104

哈工大李治軍老師的作業系統 http://www.icourse163.org/course/HIT-1002531008#/info

作業系統 參考連結:http://www.bilibili.com/video/BV1YE411D7nH

資料結構與演算法

陳越&何應欽的資料結構和演算法公開課 http://www.icourse163.org/course/zju-93001#/info

《Java版資料結構與演算法》 參考連結:http://www.bilibili.com/video/BV1E4411H73v

計算機網路

哈工大版本 參考連結:http://www.icourse163.org/course/hit-154005

中科大鄭烇、楊堅全套《計算機網路(自頂向下方法 第7版》 參考連結:http://www.bilibili.com/video/BV1JV411t7ow

計算機組成原理

哈工大計算機組成原理

上:http://www.icourse163.org/course/hit-309001#/info 下:http://www.icourse163.org/course/hit-1001527001#/info

分散式理論

關於這一塊內容,我沒有在B站找到資源可以直接看。這塊內容因為都是一些比較高深的論文,我相信很少有老師能夠通俗易懂的講給大家,這塊就全靠大家蒐集資源了。我給出了學習大綱:

  • 分散式中的一些基本概念:叢集(Cluster)、負載均衡(Load Balancer)等

  • 分散式系統理論基礎:一致性、2PC 和 3PC

  • 分散式系統理論基礎:CAP

  • 分散式系統理論基礎:時間、時鐘和事件順序

  • 分散式系統理論進階:Paxos

  • 分散式系統理論進階:Raft、Zab

  • 分散式系統理論進階:選舉、多數派和租約

  • 分散式鎖的解決方案

  • 分散式事務的解決方案

  • 分散式 ID 生成器解決方案

Netty與網路通訊

我只找到了這個,我挑了幾章我自己研究過的看,總體來說講到點子上了。

《Netty影片教程》 http://www.bilibili.com/video/BV1DJ411m7NR

框架篇

這部分就到了真正考驗各個老師的水平階段了。

離線部分必看的幾個影片:

Hadoop

《Hadoop2.x框架入門教程》 http://www.bilibili.com/video/BV1cW411r7c5

《大資料Hadoop3.x(全新升級/部署+原始碼+實戰)》 http://www.bilibili.com/video/BV1Qp4y1n7EN

當時看到3.x這個影片的時候,無哥我是虎軀一震。這也太強了,Hadoop3.x才出多久,這網上影片都有了?

Hive

Hive也是,這特麼3.x版本才出來沒多久。在下實在也是震驚了。關鍵這課的質量還挺好。

《Hive教程(基於Hive3.1.2)》 http://www.bilibili.com/video/BV1EZ4y1G7iL

如果上面的入門課程滿足不了你,下面的這個進階課相信可以填滿你了。

《2021新版Hive高階進階教程》 http://www.bilibili.com/video/BV1Cb4y1r7p2

Hbase

如果你是一個初學者,那麼可以看這個:

HBase入門教程 http://www.bilibili.com/video/BV1Y4411B7jy

那麼如果你是一個資深的開發,需要系統的學習或者查漏補缺,影片就滿足不了大家了。這裡我推薦一本書:

《HBase原理與實踐》, 作者: 胡爭、範欣欣

Kafka

你可以參考這個影片:

《訊息佇列kafka快速入門》 http://www.bilibili.com/video/BV1a4411B7V9

Kafka這個框架更新也非常頻繁,至今已經到了3.x版本了,並且引入了很多新的特性。目前還沒有看到跟最新版本有關的影片出現。

如果你的時間有限,可以看這個:

《B站講的最好的Kafka影片教程全集》 http://www.bilibili.com/video/BV1eg411g7s3

Spark

這個名字取得很大,但是當成一個入門課還是不錯的。

《大資料Spark教程從入門到精通》 http://www.bilibili.com/video/BV11A411L7CK

同樣大家也知道,Spark3.x版本的更新也帶來了一波巨大的改變。

大資料Spark3.0教程 http://www.bilibili.com/video/BV11A411L7CK

就問你強不強!

Flink

再次給清華大佬跪下了。Flink的這個影片我在群裡跟很多小夥伴推薦過了。

此影片一出,B站吃瓜群眾驚呼:武老師,發生甚麼事了?!

Java版Flink(武老師清華碩士,原IBM-CDL負責人) http://www.bilibili.com/video/BV1qy4y1q728

清華大佬不滿足於此,竟然給Flink SQL出了單獨的影片!

Flink SQL(武老師清華碩士,原IBM-CDL負責人) http://www.bilibili.com/video/BV12k4y1z7LM

專案實戰篇

《大資料電商數倉V3.0版本教程》 http://www.bilibili.com/video/BV1Hp4y1z7aZ

《實時資料倉庫專案(阿里雲實時數倉)》 http://www.bilibili.com/video/BV1dJ411k7BE

《2021新版電商數倉V4.0丨大資料資料倉庫專案實戰》 http://www.bilibili.com/video/BV1rL411E7uz

雲棲社群

我們來看一下簡介:

阿里雲開發者社群覆蓋雲端計算、物聯網、大資料、雲原生、資料庫、人工智慧、微服務、安全、開發、運維等技術領域,集合阿里巴巴經濟體各個單元技術優勢。

阿里雲開發者社群集合阿里巴巴經濟體各個單元技術優勢,提供分享、交流、學習、認證、工具、資源、大賽、活動、創業等一站式服務能力,滿足開發者全生命週期成長需求。

大家不要覺得囉嗦, 這個簡介就是整個阿里雲棲社群的最終定位 。所有圍繞雲棲社群的建設都是基於這樣的構想而進行的。

今天我們介紹的就是它的大資料板塊,我們直接給出網址:

http://developer.aliyun.com/community/bigdata

在首頁的左上角你可以看到更多的的子目錄:

如果你需要從大資料擴充套件到其他領域的學習,那麼你能看到更多的板塊,去對應板塊尋找資源。

關鍵用法

雲棲社群裡的內容非常龐大,雖然很多文章和資源都是介紹阿里雲相關的產品,但是你可以找到很多官方和個人博主總結的電子書和問答內容。

下面我介紹幾個關鍵的內容,教大家怎麼用好這個社群。

電子書區

你可以通過首頁的「電子書」標籤進入這個板塊,這個板塊又被稱為 「藏經閣」 ,這裡面有非常多的電子書可以直接下載。包括「書架上新」「阿里精選」「技術實戰」等板塊。

這裡的電子書質量非常高,比如整個Java開發領域奉為圭臬的 「Java開發手冊」 ,就出自這裡。

這裡面關於大資料的電子書也非常多,很多都是阿里雲的專家進行的總結,深度遠超任何部落格。比如我經常看的 「Redis最佳實踐和實踐指南」「Apache Flink十大技術難點實戰」 等等,更多的書大家可以自己去找。

在「藏經閣」下有一個欄目叫做 「職業發展」 ,這裡面的內容需要工作5年以內的開發要好好讀一讀,基於整個資料開發方向的技術棧和未來進階的方向上的指引,這裡已經有很多大佬總結好了。相信能給你解答很多困惑。

產品討論(問答區)

這個問答區,在大資料領域應該是一個比較好論壇板塊了。當然有些回答不是很及時,或者很多討論阿里雲產品的,但是阿里雲的產品很多都和開源的產品有對應關係。

大資料領域的問題不比Java或者Go等的後端開發,首先 問題的難點不是一個數量級 。也就是說, 大資料領域的難點比後端開發解決起來要困難的多 。因為導致某一個現象的原因可能有很多, 對回答者的技術棧深度和廣度要求比後端高太多太多 ,根本不在一個級別。

比如你的問題是 「如何計算pv/uv」? ,這樣的問題很難回答,需要的前置條件太多,比如你是基於Spark還是基於Flink,你是實時統計還是SQL查詢?所以大資料領域的問題一般都是方向性的。

這個板塊的問題,大家可以好好看看。看看業界的做法一般都是什麼樣的。

學習路線&進階區

這個部分不在多言,如果你需要在某一個領域深造,那麼首先方向不能錯,否則一切都是徒勞的。

這個板塊不僅給出了學習路線,你學習完成後還可以測試一下你掌握的程度。也就是「技能自測」區,如下圖:

公開課

這裡有很多公司技術專家、技術負責人、CTO級別的技術分享,你可以看到很多大的公司在某一個領域是怎麼做的,而且大都是高清的影片。

比如你所在公司也是電商行業,需要做搜尋,那麼你可以參考:

看看別人是怎麼做的?不要侷限在某一段程式碼的開發,某一個技術點學習上。這種方向上的把握是大家未來進階必須要經歷的過程,否則你永遠只能待在最一線做基礎的開發工作。

活動&訓練營

這個板塊是很多線上的訓練營和活動的釋出地址,你可以在這裡看到很多訓練營的活動。雖然有的是基於開源的,有基於阿里雲產品的,但是沒有關係,總有一些適合你的,比如Apache Flink的極客挑戰賽活動。

熱門技術圈

這個就是大家最關注的一些圈子了。熱度很高的圈子自然可能就是未來發展的重點,有時間不妨多跳出自己目前從事的這個方向,看看其他的圈子都在做什麼。

總結

整個雲棲社群的大資料板塊還有非常多的寶藏區等待大家自己去發掘。整個雲棲社群大資料體系,無論是從質量還是廣度上,都遠超其他任何部落格的大資料板塊。

第四部分:未來趨勢篇

大資料領域仍然處於發展期,部分技術收斂,但新方向和新領域層出不窮。阿里雲端計算平臺事業部也推出了「後紅海」時代的大資料的發展趨勢。

我把其中的觀點詳細列了出來:

近實時架構興起

在離線 batch 計算和純流式實時計算之間,以開源 Apache Delta/Hudi 為代表的近實時架構成為熱點。近實時架構避免了流計算龐大的狀態儲存與管理,在成本和延遲上找到了另一個平衡。隨近實時架構的形成,計算架構最終完成從離線到實時全頻譜支援。

資料湖三巨頭的持續發展給近實時架構的落地帶來了可能性。資料湖方向也是需要大家密切關注的方向。

資料共享與隱私保護成為熱點

資料成為資產,開始具備可變現和可交易的能力。可保護隱私的資料交換/共享能力成 為強勁的需求。基於 Differential Privacy 的資料編碼交易,以及基於 Federated Learning的多方面安全計算是該領域的熱點技術。

隱私計算是一類技術方案,在處理和分析計算資料的過程中能保持資料不透明、不洩露、無法被計算方法以及其他非授權方獲取。

從技術角度出發,隱私計算是涵蓋眾多學科的交叉融合技術,目前主流的隱私計算技術主要分為三大方向:

  • 第一類是以多方安全計算為代表的基於密碼學的隱私計算技術;

  • 第二類是以聯邦學習為代表的人工智慧與隱私保護技術融合衍生的技術;

  • 第三類是以可信執行環境為代表的基於可信硬體的隱私計算技術。

不同技術往往組合使用,在保證原始資料安全和隱私性的同時,完成對資料的計算和分析任務。

IoT成為熱點

目前人的行為資料(日誌)是大資料計算的主要來源,超過 80%的資料都來源於行為 日誌(例如瀏覽、點選)。隨 5G+智慧化裝置的興起,裝置日誌會成為更大的資料來源增長點,面向海量低價值裝置資料的處理和優化,需要得到更多的關注。

Apache 軟體基金會於北京時間2020年9月23日宣佈Apache IoTDB畢業成為 Apache 頂級專案。

Apache IoTDB(物聯網資料庫)是一體化收集、儲存、管理與分析物聯網時序資料的軟體系統。Apache IoTDB 採用輕量式架構,具有高效能和豐富的功能,並與Apache Hadoop、Spark和Flink等進行了深度整合,可以滿足工業物聯網領域的海量資料儲存、高速資料讀取和複雜資料分析需求。

如果未來你從事的是IoT方向,那麼需要持續關注這個領域的發展。

AI for System

AI for System,即大資料自動駕駛。AI 作為工具,成為優化的常用手段。在大資料領域,隨資料量/系統複雜度的增長,DBA 模式已經不再試用。利用演算法優化系統成為主流方向,大資料的"自動駕駛"會越來越自動。

雲原生和圖計算

根據阿里雲關濤老師的一些觀點:

資料庫和數倉已經發展了 40 多年,主流的計算正規化就是二維關係表達。近 10 年,深度學習帶來了一個新的計算方式。那除此以外,還有沒有一個更新一代的計算方式會產生?

圖計算是目前最被看好的方向,它是點邊模型,與二維關係表達並不相同。但是資料庫技術發展過程中也誕生了圖計算模式,並且已經發展多年,但目前仍然不是主流。

隨著圖學習 GraphEmbedding 技術的興起,圖計算是否能煥發新生變成一個主流的計算正規化也是值得大家關注的。

圖計算領域的一些資料庫可能是大家學習的重點,例如:Neo4j、JanusGraph、HugeGraph等。

而「雲原生(Cloud Native)」在2021年在大資料與雲端計算領域牢牢佔據了C位。資料顯示,雲原生計算基金會(CNCF)現在擁有 730 多個成員組織和 100 多個開源雲原生專案,整個雲原生生態逐步趨於完善。

雲原生領域涵蓋的技術類別越來越多,但最關鍵的三項是容器、Serverless、Service Mesh。其中以K8s為核心的容器技術需要大家持續關注。

第五部分:面試&建議

這部分你可以直接參考: 《八千里路雲和月 | 從零到大資料專家學習路徑指南》 的面試部分。

校招面試

一個校招的同學在面試這些中大公司的時候會進行評級,例如S/A/B/C這樣的分級。

那麼影響一個校招同學評級的要素有哪些?

第一,硬條件、學校、學歷。

這部分不必多言,大家應該都懂。學校的牌子是你拿到一面的最好的招牌。

第二,比賽/榮譽/論文等

這部分主要是在學校的一些論文、獲獎、比賽等。這部分需要你突出你在學校的科研能力,這是證明你過去能力的最直接證明。

第三,計算機基礎

計算機基礎包含計算機專業的基本主要的課程,也就是資料結構,計算機組成原理,計算機網路,作業系統。

此外你還需要刷上一些Leetcode題目保證自己的演算法題能寫出來。

還有就是你的語言基礎,如果你是做OLAP資料庫底層,那麼可能要求C和C++基礎,如果你去做Flink這樣的中介軟體平臺或者業務開發,那麼就是Java的基礎。懂了啵?

第四,專案經驗

這部分主要是各位在學校實驗室跟導師做的專案,以及你的實習經歷。一份名企的實習經歷是非常加分的。

第四,專案經驗

這部分主要是各位在學校實驗室跟導師做的專案,以及你的實習經歷。一份名企的實習經歷是非常加分的。

大家根據自己的情況去做一些實際專案吧。能實習最好,其次在實驗室寫一些專案也可以,最後實在不行就在B站找上幾個學一下,參考: 《我在B站讀大學,大資料專業》

社招同學看這裡

要有信心

2021年是非常糟糕的一年。

但是大家應該有信心,畢竟你們已經工作很多年了。如果你不是混日子,那麼技術積累應該都是有的。在過去幾年裡,是技術爆炸的幾年。很多工作多年的朋友應該都經歷過從0到1開發某個平臺或者專案的經歷。

這樣的機會,剛參加工作的同學們可能再也沒有這樣的機會了。

起碼從2019年到2021年這近3年時間裡,大資料方向應該是走向成熟的3年。很多公司都經歷了一整套大資料解決方案的開發和上線過程。

這3年時間,大資料方向也經歷了和後端一樣的發展路線。很多很高深難懂的技術被封裝的簡單易用, 大資料開發方向SQL化就是證明

如果你有之前的技術沉澱,那麼換個工作對你來說都不是問題。

隨著大資料領域成熟度越來越高,開發門檻也會變得越來越低。相應技術沉澱機會越來越少了。使得新進入的同學更容易變成螺絲釘,這是一個非常可怕的事實。

要講方法

工作多年的老兵在跳槽的時候要懂得 「錯位競爭」 。應屆生和新手的優勢在於年輕、有活力,但是缺乏技術沉澱。

尤其是這兩年剛剛進入的新人,在和工作5年+的老員工競爭的時候會處於明顯劣勢。前提是老工程師們在過去的幾年要有真真正正的技術和業務壁壘。

在國內幾家頭部企業遭到重錘後,還有很多三線四線,不知名的企業在進行新IT改造。他們需要那些工作多年的老工程師去從0搭建整套的大資料技術體系,老工程師的技術沉澱、需求分析和跨部門協同能力相比年輕的工程師們有絕對的優勢。而這樣的機會給到年輕人大概率是幹不了的。

總結

時代在發展,舊的技術在消亡,例如Hadoop體系中一些不在活躍的專案,Mesos、Storm這樣的框架。新的領域層出不窮,雲原生(Cloud Native)、隱私計算、湖倉一體、IoT等等。

國內網際網路領域持續被整治,各大公司麻煩不斷。但是2021年也有非常多的新興公司脫穎而出走近大家的視野,例如DataBricks、ClickHouse,Inc、Stream Native等等。

大資料技術體系完成了1.0版本的建設,正在向2.0方向演進和迭代。

技術上將會做到更好的技術分層和更強的專業化。資料平臺賽道價值顯性化,也帶來大量投資和創業機會。

你準備好了嗎?