基於雲原生的大數據實時分析方案實踐

1 方案介紹

大數據處理技術現今已普遍應用於各個行業,爲業務解決海量存儲和海量分析的需求。但數據量的爆發式增加,對數據處理能力提出了更大的挑戰,同時對時效性也提出了更高的要求。實時分析已成爲企業大數據分析中最關鍵的術語,這意味企業可將全部數據用於大數據實時分析,實如今數據接受同時即刻爲企業生成分析報告,從而在第一時間做出市場判斷與決策。典型的場景如電商大促和金融風控等,基於延遲數據的分析結果已經失去了價值。另外隨着雲原生時代的到來,雲原生天生具備的高效部署、敏捷迭代、雲計算資源成本和彈性擴展等優點,正在加速和縮短業務系統落地過程。雲原生一樣可助力大數據這一過程。sql

本文主要介紹如何利用 Kubernetes 實現雲原生大數據實時分析平臺。數據庫

2 整體架構

img

  • 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 資源自動部署、自動擴展、一次配置任意運行等能力作到雲原生賦能。less

img

4 數據計算

在傳統的數據處理流程中,老是先收集數據,而後將數據放到數據庫中。當人們須要的時候經過數據庫對數據作查詢,獲得答案或進行相關的處理。這樣看起來雖然很是合理,可是結果卻很是的緊湊,尤爲是在一些實時搜索應用環境中的某些具體問題,相似於 MapReduce 方式的離線處理並不能很好地解決問題。這就引出了一種新的數據計算結構 - 流計算方式。它能夠很好地對大規模流動數據在不斷變化的運動過程當中實時地進行分析,捕捉到可能有用的信息,並把結果發送到下一計算節點。運維

在雲原生下,咱們將流計算引擎容器化和遷移到 Kubernetes 上,利用 Kubernetes 自動化部署、HPA 等能力實現計算資源動態建立、調度與伸縮。雲原生賦予了流計算即拿即用資源的能力。分佈式

img

當前主流的流計算引擎都可順暢的運行在 Kubernetes 之上。工具

4.1 Spark on Kubernetes

Spark 在 2.3 以後,支持將集羣建立和託管到 Kubernetes 中,以 native 方式運行。oop

img

Kubernetes 可幫助 Spark 任務分配和管理計算資源,提供網絡和存儲,管理任務生命週期,動態的橫向擴展能力,以及鏈接 Kubernetes 生態其餘服務的能力。性能

Flink 在 Kubernetes 上支持 standalone 與 native 兩種模式。standalone 至關於利用 Kubernetes Deployment、Service、Configmap 等在 Kubernetes 上建立一個完整 Flink 集羣。native 方式相似 Spark native,是經過內置於 Flink Client 的 K8s Client 與 Kubernetes 集羣交互,負責組件資源的建立和銷燬。Flink 新引入的 Application 模式,更是能夠在提交 Job 的同時動態建立 Flink 集羣。

img

5 數據工做流

數據工做流(Data Pipeline)能夠理解爲一個貫穿數據產品或數據系統的管道,而數據就是管道載體的運輸對象。數據工做流鏈接了數據處理分析的各個環節,將整個龐雜的系統變得井井有理,便於管理和擴展。

img

咱們根據生產經驗,設計和研發了基於雲原生的數據工做流方案 TKDF,以幫助用戶集中精力從數據中獲取所須要的信息,而不是把精力花費在管理平常數據和管理數據庫方面。

img

TKDF 有如下優點:

  • 基於雲原生
  • YAML 聲明式定義
  • 支持主流數據源
  • 接口式封裝,可插件化增長新的數據源實現
  • 完整的數據生命週期管理
  • 原生支持 Spark Streaming
  • 計算模型抽象,支持基數統計近似、漏斗模型、模糊計算、產品運營指標等

6 數據湖

現今大數據存儲和處理需求愈來愈多樣化,在後 Hadoop 時代,如何構建一個統一的數據湖存儲,並在其上進行多種形式的數據分析,成了企業構建大數據生態的一個重要方向。怎樣快速、一致、原子性地在數據湖存儲上構建起 Data Pipeline,成了亟待解決的問題。而且伴隨雲原生時代到來,雲原生天生具備的自動化部署和交付能力也正催化這一過程。

基於 Hadoop 的雲原生數據湖

傳統方式下,用戶在部署和運維大數據平臺時一般採用手動或半自動化方式,這每每消耗大量人力,穩定性也沒法保證。Kubernetes 的出現,革新了這一過程。Kubernetes 提供了應用部署和運維標準化能力,用戶業務在實施 Kubernetes 化改造後,可運行在其餘全部標準 Kubernetes 集羣中。在大數據領域,這種能力可幫助用戶快速部署和交付大數據平臺(大數據組件部署尤其複雜)。尤爲在大數據計算存儲分離的架構中,Kubernetes 集羣提供的 Serverless 能力,可幫助用戶即拿即用的運行計算任務。而且再配合離在線混部方案,除了可作到資源統一管控下降複雜度和風險外,集羣利用率也會進一步提高,大幅下降成本。

咱們使用 TKBS 在 Kubernetes 上構建 Hadoop 數據湖:

img

基於 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 上構建雲原生數據湖。

img

咱們使用 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 S三、Cassandra、MongoDB 和 HBase,又可支持關係數據源,例如 MySQL、PostgreSQL、Amazon Redshift、Microsoft SQL Server 和 Teradata。

Presto 查詢引擎是 Master-Slave 架構,由一個 Coordinator節點,一個 Discovery Server 節點,多個 Worker 節點組成。

img

咱們經過 standalone 方式將 Presto 集羣部署在 Kubernetes 上:

img

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 是一個開源的商業智能工具,你能夠向它提出關於數據的問題(數據查詢),而獲取有意義的格式化結果(圖形化視圖)。咱們可經過它理解數據、分析數據,以數據驅動決策。

img

Metabase 支持諸多數據源及計算引擎接入:

img

咱們利用官方提供的 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 的大數據實時分析方案,能夠幫助用戶縮短大數據交付過程,簡化大數據系統部署與運維複雜度,讓用戶聚焦在挖掘數據價值自己。另外一方面,藉助雲原生架構,咱們但願能幫助用戶的大數據業務與雲發生聯繫,爲用戶帶來更多的可能性,幫助用戶創造更多的價值。

生於雲上,爲雲而生!

【騰訊雲原生】雲說新品、雲研新術、雲遊新活、雲賞資訊,掃碼關注同名公衆號,及時獲取更多幹貨!!

相關文章
相關標籤/搜索