1 方案介紹
大數據處理技術現今已廣泛應用於各個行業,為業務解決海量存儲和海量分析的需求。但數據量的爆發式增長,對數據處理能力提出了更大的挑戰,同時對時效性也提出了更高的要求。實時分析已成為企業大數據分析中最關鍵的術語,這意味企業可將所有數據用於大數據實時分析,實現在數據接受同時即刻為企業生成分析報告,從而在第一時間作出市場判斷與決策。典型的場景如電商大促和金融風控等,基於延遲數據的分析結果已經失去了價值。另外隨着雲原生時代的到來,雲原生天生具有的高效部署、敏捷迭代、雲計算資源成本和彈性擴展等優勢,正在加速和縮短業務系統落地過程。雲原生同樣可助力大數據這一過程。
本文主要介紹如何利用 Kubernetes 實現雲原生大數據實時分析平台。
2 總體架構
- Data Streams:基於 Kafka 的數據流接入方案
- Data Computations:基於 Spark Streaming 與 Flink 的流計算方案
- Data Pipeline:基於 TKDF(Tencent Kubernetes Data Flow) 的數據工作流方案
- Data Store:基於 Iceberg 與 HDFS 的數據湖方案
- Data Interactive Analysis:基於 Spark SQL 與 Presto 的 SQL 交互式分析方案
- Data Intelligence:基於 Metabase 的數據可視化方案以及若干數據接入方式
- Data Infrastructure:基於 TKBS(Tencent Kubernetes Bigdata Suite)的雲原生大數據套件方案,可幫助用戶一鍵在 Kubernetes 上部署生產可用的大數據平台;基於 TKE / EKS / TKEStack 的 Kubernetes 引擎方案,可為用戶提供生產、管控和使用 Kubernetes 集群服務
3 數據接入流
在實時分析中,需要持續、快速、實時地接受源源不斷的數據與事件,作為整個分析平台的數據來源與入口。這個過程最好是基於流的、高吞吐、可擴展、可對接主流計算引擎。我們選擇 Apache Kafka 作為事件流處理的解決方案。
Apache Kafka 是一個分布式流處理平台,被很多公司廣泛使用於數據管道、流分析、數據集成,消息中間件等領域。Kafka 適合場景包括:
- 消息隊列:構造實時流數據管道,它可以在系統或應用之間可靠地獲取數據
- 流處理:構建實時流式應用程序,對這些流數據進行轉換或者影響
Apache Kafka 可通過容器化部署在 Kubernetes,充分利用 Kubernetes 資源自動部署、自動擴展、一次配置任意運行等能力做到雲原生賦能。
4 數據計算
在傳統的數據處理流程中,總是先收集數據,然后將數據放到數據庫中。當人們需要的時候通過數據庫對數據做查詢,得到答案或進行相關的處理。這樣看起來雖然非常合理,但是結果卻非常的緊湊,尤其是在一些實時搜索應用環境中的某些具體問題,類似於 MapReduce 方式的離線處理並不能很好地解決問題。這就引出了一種新的數據計算結構 - 流計算方式。它可以很好地對大規模流動數據在不斷變化的運動過程中實時地進行分析,捕捉到可能有用的信息,並把結果發送到下一計算節點。
在雲原生下,我們將流計算引擎容器化和遷移到 Kubernetes 上,利用 Kubernetes 自動化部署、HPA 等能力實現計算資源動態創建、調度與伸縮。雲原生賦予了流計算即拿即用資源的能力。
當前主流的流計算引擎均可順暢的運行在 Kubernetes 之上。
4.1 Spark on Kubernetes
Spark 在 2.3 之后,支持將集群創建和托管到 Kubernetes 中,以 native 方式運行。
Kubernetes 可幫助 Spark 任務分配和管理計算資源,提供網絡和存儲,管理任務生命周期,動態的橫向擴展能力,以及連接 Kubernetes 生態其他服務的能力。
4.2 Flink on Kubernetes
Flink 在 Kubernetes 上支持 standalone 與 native 兩種模式。standalone 相當於利用 Kubernetes Deployment、Service、Configmap 等在 Kubernetes 上創建一個完整 Flink 集群。native 方式類似 Spark native,是通過內置於 Flink Client 的 K8s Client 與 Kubernetes 集群交互,負責組件資源的創建和銷毀。Flink 新引入的 Application 模式,更是可以在提交 Job 的同時動態創建 Flink 集群。
5 數據工作流
數據工作流(Data Pipeline)可以理解為一個貫穿數據產品或數據系統的管道,而數據就是管道載體的運輸對象。數據工作流連接了數據處理分析的各個環節,將整個龐雜的系統變得井然有序,便於管理和擴展。
我們根據生產經驗,設計和研發了基於雲原生的數據工作流方案 TKDF,以幫助用戶集中精力從數據中獲取所需要的信息,而不是把精力花費在管理日常數據和管理數據庫方面。
TKDF 有以下優勢:
- 基於雲原生
- YAML 聲明式定義
- 支持主流數據源
- 接口式封裝,可插件化增加新的數據源實現
- 完整的數據生命周期管理
- 原生支持 Spark Streaming
- 計算模型抽象,支持基數統計近似、漏斗模型、模糊計算、產品運營指標等
6 數據湖
現今大數據存儲和處理需求越來越多樣化,在后 Hadoop 時代,如何構建一個統一的數據湖存儲,並在其上進行多種形式的數據分析,成了企業構建大數據生態的一個重要方向。怎樣快速、一致、原子性地在數據湖存儲上構建起 Data Pipeline,成了亟待解決的問題。並且伴隨雲原生時代到來,雲原生天生具有的自動化部署和交付能力也正催化這一過程。
基於 Hadoop 的雲原生數據湖
傳統方式下,用戶在部署和運維大數據平台時通常采用手動或半自動化方式,這往往消耗大量人力,穩定性也無法保證。Kubernetes 的出現,革新了這一過程。Kubernetes 提供了應用部署和運維標准化能力,用戶業務在實施 Kubernetes 化改造后,可運行在其他所有標准 Kubernetes 集群中。在大數據領域,這種能力可幫助用戶快速部署和交付大數據平台(大數據組件部署尤為復雜)。尤其在大數據計算存儲分離的架構中,Kubernetes 集群提供的 Serverless 能力,可幫助用戶即拿即用的運行計算任務。並且再配合離在線混部方案,除了可做到資源統一管控降低復雜度和風險外,集群利用率也會進一步提升,大幅降低成本。
我們使用 TKBS 在 Kubernetes 上構建 Hadoop 數據湖:
基於 Iceberg 的雲原生實時數據湖
Apache Iceberg is an open table format for huge analytic datasets. Iceberg adds tables to Presto and Spark that use a high-performance format that works just like a SQL table.
Apache Iceberg 是由 Netflix 開發開源的,其於2018年11月16日進入 Apache 孵化器,是 Netflix 公司數據倉庫基礎。Iceberg 本質上是一種專為海量分析設計的表格式標准,可為主流計算引擎如 Presto、Spark 等提供高性能的讀寫和元數據管理能力。Iceberg 不關注底層存儲(如 HDFS)與表結構(業務定義),它為兩者之間提供了一個抽象層,將數據與元數據組織了起來。
Iceberg 主要特性包括:
- ACID:具備 ACID 能力,支持 row level update/delete;支持 serializable isolation 與 multiple concurrent writers
- Table Evolution:支持 inplace table evolution(schema & partition),可像 SQL 一樣操作 table schema;支持 hidden partitioning,用戶無需顯示指定
- 接口通用化:為上層數據處理引擎提供豐富的表操作接口;屏蔽底層數據存儲格式差異,提供對 Parquet、ORC 和 Avro 格式支持
依賴以上特性,Iceberg 可幫助用戶低成本的實現 T+0 級數據湖。我們使用 Iceberg + HDFS 的方式在 Kubernetes 上構建雲原生數據湖。
我們使用 Kubernetes 負責應用自動化部署與資源管理調度,為上層屏蔽底層環境復雜性。通過 TKBS 一鍵式部署雲原生數據湖。Iceberg + HDFS 實現了基於 Hadoop 生態的實時數據湖,為大數據應用提供數據訪問及存儲能力。Spark、Flink、Presto 等計算引擎以 native 或 standalone 方式運行於 Kubernetes 集群中,資源可隨提交任務即拿即用。與在線業務混部后,更能大幅提升集群資源利用率。
- Resource Layer:使用 Kubernetes 提供資源管控能力
- Data Access Layer:使用 Iceberg 提供 ACID、table 等數據集訪問操作能力
- Data Storage Layer:使用 HDFS 提供數據存儲能力
- Data Computation Layer:使用 Spark / Flink / Presto on Kubernetes 提供流批計算能力或實現 SQL 引擎
7 交互式分析
實時分析除了持續實時分析外(Continuous real-time analytics),還包括交互式分析(On-demand real-time analytics)。交互式分析是一種反應式分析方法,用戶通過查詢獲取分析結果(比如輸入 SQL 語句)。我們采用 SQL 語句作為交互式查詢語句,支持 Spark SQL 與 Presto 兩種 SQL 查詢引擎。
7.1 Presto on Kubernetes
Presto 是由 Facebook 開源的分布式 SQL 查詢引擎,專門為交互式查詢所設計,提供分鍾級乃至亞秒級低延時的查詢性能。它既可支持非關系數據源,例如 HDFS、Amazon S3、Cassandra、MongoDB 和 HBase,又可支持關系數據源,例如 MySQL、PostgreSQL、Amazon Redshift、Microsoft SQL Server 和 Teradata。
Presto 查詢引擎是 Master-Slave 架構,由一個 Coordinator節點,一個 Discovery Server 節點,多個 Worker 節點組成。
我們通過 standalone 方式將 Presto 集群部署在 Kubernetes 上:
7.2 Spark SQL on Kubernetes
Spark SQL 是 Spark 結構化數據的執行模塊,可支持使用 SQL 在 Spark 查詢分析結構化數據 DataFrames、Datasets。我們同樣支持使用 Spark SQL 作為交互式分析引擎,將執行的 Spark 任務以 native 方式運行在 Kubernetes 上。
8 數據智能分析
我們正處於大數據和數字化轉型的時代,數據無處不在,運用數據驅動的思想和策略在實踐中逐漸成為共識。數據的價值已在科學研究和工商業的不同領域得到充分展現。數據智能工具和技術的應用可以幫助決策者更好地理解所收集的信息,從而開發出更好的業務流程。我們通過提供數據接口與接入外部 BI 來達成這一目的。
8.1 數據接口
我們通過以下方式提供交互式入口或數據接口,以幫助用戶使用或接入第三方系統:
- 圖形化界面:基於 Metabase 的開源 BI 系統
- JDBC 接口:通過 Spark Thrift Server 或 Presto JDBC Driver 的連接
- 命令行接口:通過 Spark SQL CLI 或 Presto CLI 連接
8.2 數據可視化
Metabase 是一個開源的商業智能工具,你可以向它提出關於數據的問題(數據查詢),而獲取有意義的格式化結果(圖形化視圖)。我們可通過它理解數據、分析數據,以數據驅動決策。
Metabase 支持諸多數據源及計算引擎接入:
我們利用官方提供的 Helm 包,可以方便的將 Metabase 部署於 Kubernetes 上。
9 數據基礎設施
9.1 TKBS
TKBS(Tencent Kubernetes Bigdata Suite)是我們根據生產經驗開發的雲原生大數據套件項目,用戶可使用 TKBS 一鍵在 Kubernetes 上部署生產可用的大數據平台。TKBS 當前已支持 Hadoop 主要組件以及主流大數據組件的部署。
TKBS 主要特點如下:
- 兼容社區:支持原生 Kubernetes
- 一鍵部署:采用 Helm 應用化封裝
- 雲原生增強:與騰訊雲 TKE、EKS、CBS、CLB、COS 和 CHDFS 等雲服務深度整合;支持開源 TKEStack
- 存算分離:支持存儲計算分離架構
- 自動擴縮容:支持自動 HPA 和 CA,節省運營成本
- 離在線混部:支持與在線業務混合部署,提升資源利用率
9.2 TKE / EKS / TKEStack
我們使用騰訊雲 TKE / EKS 或開源 TKEStack 幫助我們生產和管理 Kubernetes 集群。
- TKE:騰訊雲容器服務(Tencent Kubernetes Engine ,TKE)基於原生 kubernetes 提供以容器為核心的、高度可擴展的高性能容器管理服務
- EKS:騰訊雲彈性容器服務(Elastic Kubernetes Service,EKS)是騰訊雲容器服務推出的無須用戶購買節點即可部署工作負載的服務模式
- TKEStack:騰訊雲 TKE 團隊開源的一款集強壯性和易用性於一身的企業級容器編排引擎,以極簡的向導式界面提供了容器應用的全生命周期管理能力,幫助用戶在私有雲環境中敏捷、高效地構建和發布應用程序
10 結尾
雲原生的到來不止為大數據部署和交付帶來了變革,它更是幫助大數據連接了一個生態。利用雲原生生態,真正做到了為大數據賦予雲的能力,使得大數據可以“生長在雲端”。另外,雲原生在大數據領域的應用,也同樣幫助雲原生拓展了能力邊界,豐富了落地場景,為未來“Everything native on Cloud”打下夯實基礎。
TKBS 已上線騰訊雲 TKE 應用市場,下個版本會加入對實時分析完整方案與 TKDF 的支持。我們希望憑借基於 TKBS 與 TKDF 的大數據實時分析方案,可以幫助用戶縮短大數據交付過程,簡化大數據系統部署與運維復雜度,讓用戶聚焦在挖掘數據價值本身。另一方面,借助雲原生架構,我們希望能幫助用戶的大數據業務與雲發生聯系,為用戶帶來更多的可能性,幫助用戶創造更多的價值。
生於雲上,為雲而生!
【騰訊雲原生】雲說新品、雲研新術、雲游新活、雲賞資訊,掃碼關注同名公眾號,及時獲取更多干貨!!