一、簡介
(一)DataStax公司
DataStax 公司長久以來被人們認為是Apache Cassandra的商業公司,在C*項目的早期,DataStax公司貢獻了85%以上的代碼,DataStax也是近年代碼的主要貢獻者,占比在40-50%左右。
最近幾年,DataStax專注于把 Cassandra資料庫做成雲原生的資料服務平台,簡稱C*-as-a-service。DataStax還推出了很多産品來幫助 Cassandra社群程式員開發,如開源的資料API網關。
二、大資料,資料湖,和Lambda架構簡介
(一)大資料

如上所示,近年來大資料的特性主要可以總結為5V,5V特性如下。
l 5V定義/特性
1)體量/規模(volume)
Zetabyte (1021) era
2)速度(velocity)
物聯網,移動程式,社交軟體,流處理。
3)多樣性(variety)
結構化,半結構化,無結構
4)準确性(veracity)
5)價值(value)
近些年來一個比較通用的對大資料特性的一個定位,展現在5個v上,這代表是5個英文單詞的首字母都是V字母v比如說體量和規模是volume,velocity,variety,veracity,value。
(二)資料湖
l 所有企業資料的集合
1)資料源和格式的多樣性
資料的原始格式
2)海量資料
量大,生成速度快
l 企業資料湖架構
1)大資料擷取、處理、存儲和使用的架構
2)大資料技術(水準擴充和高彈性)
資料湖可以從兩個層面去了解。第一個是較靜态的含義,指一個企業所有資料的集合,它反映了大資料的每個方面,資料來源的多樣性,資料格式的多樣性,巨大的資料體量以及資料快速生成等,這些都是大資料的典型特性。
更重要的一點是,它指一個比較動态的從端到端的資料處理架構,從原始資料開始,然後到基本的資料處理,然後把它存儲到企業的中心的資料庫裡面,接着做進一步的分析處理,産生商業決策的資訊,進而讓下遊系統利用,資料可視化的商業智能資料科學人工智能等。
是以從整個資料的生成到最後資料被系統利用起來,整個資料處理環節可以認為是一個企業資料庫很關鍵的組成部分。
l 快資料
1)大資料不僅僅“大”,而且“快”
2)GB/秒或TB/秒
3)“新鮮”資料挖掘
批處理模式沒法滿足要求
近年來,當人們讨論大資料的時候,經常把重點放在“快”。這個“快”不僅意味着資料是以很快的速度生成,更多意義着整個資料的處理、分析、提取,然後最後到生成資料決策資訊,整個過程是近乎實時的。
(三)Lambda架構
l 批處理層
1)主資料管理(Single source of Truth)
原始資料(raw data)
不可更改的(immutable)
追加更新(append only)
資料準确(externally true)
2)批處理視圖預處理
預處理政策
l 速處理層:
1)處理新添加的資料
2)彌補批處理視圖和新加資料之間的差距
l 服務層:
低延遲資料查詢
高容錯性(硬體問題,人為失誤)
低延遲讀和寫(OLTP and OLAP)
線性拓展
易延展性
Lambda架構是較為通用且結構較好的架構,它主要有三層。
第一個是批處理層,它和傳統資料倉庫的批處理概念基本一緻。
第二個是速處理層,許多平台所面臨的問題是對實時資料的處理分析和挖掘,它的缺點是無法像批處理層一樣處理大量曆史資料,是以它更側重于分析,利用傳統批處理層的方式去處理曆史資料。
第三個是服務層,它包括了很多不同的資料視圖,這些資料視圖可以從批處理層來,也可以從實時處理層來。這些這些資料視圖主要是能幫助我們在企業的資料庫的分布式企業資料庫、環境裡面解決高容錯性問題,解決低延遲讀寫的問題,以及幫助企業資料庫架構進行線性擴充。而且當有新的技術或服務出現時,可以很容易融入到現有的Lambda架構中。
三、Apach Cassandra,Spark,and Pulsar的Lambda實作
(一)Apach Cassandra
l 分布式,非主從結構、寬列開源NoSQL資料庫
l 無縫多資料中心資料複制
l 線性擴充
l 強容錯、零當機
l 可調資料一緻性控制,高性能讀寫
l 雲原生(混合雲,多雲)
Cassandra資料庫是分布式非主從結構的寬列NoSQL資料庫,因為它沒有主從結構,擴充性非常好,基本上是線性的擴充,而且每個資料會有多個副本。這意味着即便是有一個伺服器當機了,還有别的資料副本來滿足使用者的查詢要求,容錯率高。
(二)Apach Spark
Apache Spark是用于大規模資料處理的統一分析引擎,它有以下特性:
1)高性能
100X Hadoop(MapReduce)
2)易用,豐富的API和程式庫
結構化,半結構化,無結構化資料
3)統一的,多用途資料分析處理引擎
流資料處理
機器學習
圖資料庫
SQL
(三)Apach Kafka or Pulsar
l 大規模、分布式消息/流資料處理平台
l 分開的計算層和資料存儲層
更好的系統擴充和負載均衡
l 無縫跨資料中心資料複制
l 靈活的消息處理模式
釋出/訂閱
消息隊列
混合模式
l 内置多租客系統支援
l 高性能,低延遲
目前最流行的流資料平台是Kafka,最近幾年Pulsar也受到越來越多的關注。從流消息處理角度來看,Kafka和Pulsar非常相似,都是大規模分布式消息處理流資料平台,Pulsar的優點在于它的計算層和存儲層是分開的,Kafka這兩個是在一起的。
分開計算層和存儲帶來的優點顯而易見,首先是系統的擴容性比較好,可以分開的擴容計算層和存儲層。其次是計算是無狀态的,是以說當擴容計算層的時候,它對系統的影響非常小,而且擴容速度極快。
(四)Lambda架構-Apach Cassandra,Spark,and Pulsar
上圖是用Apach Cassandra,Spark,and Pulsar三種技術實作Lambda的架構圖。
首先在批處理層,我們用 Cassandra資料庫作為原始資料的主資料庫,然後在速處理層我們用Pulsar來實時接受原資料的原資料流,在批處理層我們有定時的Spark Job,然後Spark Job從原始資料資料庫裡面讀取資料進行分析和處理,接着把生成的資料放到服務層的資料庫中。那麼生成的服務層資料庫就代表批處理資料視圖,根據不同的需求可以生成不同的批處理視圖,用同樣的Spark Job來實作。
(五)Lambda架構:技術棧和實作平台
l 技術棧(全部開源)
1)Apache Cassandra
- 資料模組化和CQL
- 用戶端程式設計接口
- 程式設計語言:Java
2)Apache Spark
- DataStax Spark-Cassandra連接配接器
- SparkSQL
- DataFrame
- 程式設計語言:Scala
3)Apache Pulsar
- 生産者和消費者用戶端程式設計接口
- Pulsar函數
- DataStax Pulsar-Cassandra聯結器
4)其他
- DataStax dsbulk資料加載器
l 實作平台
1)DataStax Enterprise(DSE)
- 單叢集,雙資料中心部署模式
1 DSE Core/Cassandra
1 DSE Analytics/Spark
2)Apache Pulsar
- 單叢集部署模式
3)DataStax Studio
- CQL,SparkSQL筆記本
(六)示範程式-應用場景示例
l 極簡化的石油鑽頭探測器時序資料模拟
1)每個鑽探地點有多個鑽探頭
2)每個鑽探頭有兩種傳感器:溫度和速度
3)每個傳感器每隔一段時間(1秒/1分鐘)采集一次資料
l 需要回答的商業問題(示例)
1) 監控每個鑽頭的健康狀況,防止過熱/過速
2) 批處理視圖
- 記錄每個鑽頭每日的平均溫度和轉速
- 每天一次批處理
3) 速處理視圖
- 記錄一天之内出現鑽頭過熱和過速的情況
- 實時處理
這個事例程式的應用場景是一個非常簡單的石油鑽頭的探測器時序的資料模拟,上圖是實際資料中包含的一些資料内容,包括鑽頭的ID,傳感器的ID,傳感器的類型,以及傳感器的讀取時間和傳感器的讀取值等。
在這個場景,每個鑽探地點可能會有多個站頭,每個鑽頭有兩種傳感器,一種監測溫度,一種監測速度,每隔一段時間傳感器就會收集一次資料,然後把它發送到Lambda平台。進而監控每個鑽頭健康狀況,防止過熱和過速。
從批處理視圖來看,需要記錄每個鑽頭每日的平均溫度和轉速,每日處理一次。從速處理視圖來看,記錄最近一天之内出現的鑽頭過熱和過速的情況,是實時處理的。
Ø 示範示例子部件
負載生成器:負責生成這些生成一個大量的模拟資料的
負載加載器:把這些生成的原始資料加載到原始資料庫裡面
這裡主要有三個空間,第一個是對應于原始資料的主資料庫表Master,然後還有一個對應批資料視圖資料庫表的Batchview,速處理層對應是Realtimeview。
資料處理流程情況
l 第一步:預處理
1)建立C*鍵空間和表(C* CQL)
2)生成模拟的工作負載檔案(負載生成器)
l 第二步:資料加載
1)(批處理層)将源資料加載到原始資料主資料庫中(負載加載器)
2)(速處理層)将源資料以消息的方式實施發送到Pulsar主題中(Pulsar消息釋出器)
l 第三步:資料處理,視圖資料生成
1)(批處理層)每日源資料批處理;寫入批處理視圖(每日Spark彙總程式)
2)(速處理層)當日源資料實時處理;寫入速處理視圖(Pulsar函數,Pulsar C*連接配接器)
l 第四步:資料分析
Spark SQL
四、示範
DataStax Studio
Cassandra資料庫的資訊,第一步先確定這些鍵空間删掉了以後,這裡并沒有需要的鍵空間,然後建立一些新的鍵空間和表。
生成一個模拟資料(CSV檔案),檔案生成好了以後,讓負載加載器将資料加載進來。
速處理層視圖裡面隻能看到一些最近的資料,舊的資料已經被Function函數自動過濾掉了。
第二部分:雲Cassandra + 雲DLA Spark建構輕量化資料湖解決方案示範:
第一個需要開通對象存儲oss,這是因為DLA Spark的jar包需要存儲在oss上。
第二步需要有一個自己的雲資料庫Cassandra執行個體。
第三步擷取你Cassandra的私網連接配接點,CQL端口、資料庫、使用者名、資料庫、密碼,這些資訊會被用到來連接配接Cassandra執行個體。
執行個體資訊查找:
進入控制台檢視
第四步需要建立一個資料表并且插入一些資料,待會用來驗證Spark可以正确地連接配接到這張資料表裡面,讀取資料。
最後一步需要為DLA準備通路Cassandra執行個體所需要的安全組ID和交換機ID,主要是作用于DLA spark的這些Cassandra執行個體,這些執行個體它需要挂載虛拟網卡才可以通路Cassandra。
交換機ID:可使用VSwith ID。
安全組ID:可使用VPC ID進入專有網絡ID,查詢已有安全組出方向
主要依賴是Cassandra connector 2.4.2版本
代碼需要剛才準備好的那些連接配接Cassandra執行個體的資訊,私網連接配接點,CQL端口,使用者名密碼以及表所在的表名。
總結:
第一步:開通oss存儲,把jar包上傳到oss上;
第二步:要擁有一個Cassandra執行個體;
第三步:從 Cassandra的控制台去擷取連接配接Cassandra所需要的資訊,比如它的使用者名密碼以及它連接配接的一些資訊;
第四步:準備一張測試的表用于DLA Spark連接配接Cassandra的測試;
第五步:網絡打通所需要的兩個關鍵點,準備一個安全組ID和交換機ID用于建立Spark的虛拟網卡。