1. 程式人生 > 實用技巧 >騰訊雲 Serverless ETL —— 蘑菇街實戰落地

騰訊雲 Serverless ETL —— 蘑菇街實戰落地

背景

蘑菇街旨在做一家高科技輕時尚的網際網路公司,公司的核心宗旨就是購物與社群的相互結合,為更多消費者提供更有效的購物決策建議。

蘑菇街上每天有幾百萬網友在這裡交流時尚、購物的話題,相互分享,這些行為會產生大量的資料,當這些資料來源產生資料後,需要有一個元件獲取資料來源的資料,將資料寫到 kafka,蘑菇街研發團隊以往的解決辦法,一是通過 Lofstash、Filebeat 等開源的資料儲存方案處理,二是自己寫程式碼實現這種邏輯。

開始資料量小的時候還可以,隨著業務的不斷擴張,資料越來越大,為了保障可用性、可靠性以及效能相關的內容,需要大量的研發資源投入,因此,亟待新的解決方案支援。

CKafka 全稱是 Tencent Cloud Kafka ,是一款適合公有云部署、執行、運維的分散式、高可靠、高吞吐和高可擴充套件的訊息佇列系統。它 100% 相容開源的 Kafka API,目前主要支援開源的 0.9, 0.10, 1.1.1, 2.4.2 四個大版本,並提供向下相容的能力。

目前 Tencent Cloud Kafka 維護了近萬節點的叢集,堆積資料達到了 PB 級。是一款集成了租戶隔離、限流、鑑權、安全、資料監控告警、故障快速切換、跨可用區容災等等一系列特性的,歷經大流量檢驗的、可靠的公有云上 Kafka 叢集。

CKafka 目前服務物件包括拼多多、微信、嗶哩嗶哩,以及騰訊內部的一些大的應用,包括騰訊視訊、微視等。

蘑菇街的選擇

蘑菇街團隊對比市場上的技術解決方案,從學習成本、擴縮容能力以及人工維護成本和穩定性方面考慮。

騰訊雲 Serverless 雲函式具有天然的優勢:

  1. 支援多語言
  2. 學習成本低,不需要學習開源方案,不需要學習分散式排程
  3. 無限的彈性擴容能力
  4. 多重觸發方式,事件觸發、定時觸發、主動觸發
  5. 叢集穩定性和可用性的維護成本幾乎沒有
  6. 按實際用量計費,1ms計費,費用很低

同時,騰訊雲 Serverless 雲函式+ Ckafka 提供自建的 UI 互動介面,可進行流量告警配置,同時控制檯上可進行擴容配置且安全可靠。

騰訊雲 Serverless 團隊為蘑菇街提供的業務解決方案,是通過雲函式將一個例項中某個 Topic 的訊息轉儲至另一個例項對應的 Topic上,對比原來的 Connector 方案,騰訊云云函式 SCF 能夠通過騰訊雲控制檯進行管理,能控制觸發閾值,觸發開關等,可以很方便地對每個函式進行管理。簡單來講,

  1. 訊息轉儲:將 Topic 的訊息同步至離線叢集
  2. 叢集遷移:在叢集遷移合併的過程中起到一個雙寫的作用

經過對比,騰訊雲 Serverless 雲函式 + Ckafka 是最優的解決方案,蘑菇街最終決定選擇使用騰訊雲 Serverless 雲函式 + Ckafka 運用在的訊息同步業務上。

騰訊雲 Serverless 雲函式 + Ckafka 解決方案的優勢

Kafka 社群的繁榮,讓越來越多的電商使用者開始使用 Kafka 來做日誌收集、大資料分析、流式資料處理等。而公有云上的產品 Ckafka 也藉助了開源社群的力量,和雲函式結合,推出了非常實用的功能,其優化點包括:

  • 基於 ApacheKafka 的分散式、高可擴充套件、高吞吐
  • 100% 相容 Apache KafkaAPI(0.9 及 0.10)
  • 無需部署,直接使用 Kafka 所有功能
  • Ckafka 封裝所有叢集細節,無需使用者運維
  • 支援動態升降例項配置,按照需求付費(開發中)
  • 對訊息引擎優化,效能比社群最高提升 50%

如下圖,雲函式可以實時消費 Ckafka 中的訊息,比如做資料轉存、日誌清洗、實時消費等。並且,像資料轉存的功能已經整合到了 Ckafka 的控制檯上,使用者可以一鍵開啟使用,大大降低了使用者使用的複雜度。

對比使用雲主機自建 Ckafka Consumer 的方式,雲函式幫使用者遮蔽掉了很多不必要的開銷:

  1. 雲函式控制檯上可以一鍵開啟 Ckafka 觸發器,幫助使用者自動建立 Consumer,並由雲函式平臺來維護組建的高可用;
  2. Ckafka 觸發器自身支援很多實用的配置:支援配置 offset 位置、支援配置1~1萬訊息聚合條數、支援配置 1~1萬次重試次數等;
  3. 基於雲函式開發的業務邏輯,天然支援彈性伸縮,無需額外搭建和維護伺服器叢集等。

騰訊雲 Serverless ETL 通用資料處理能力

網際網路競爭日益激烈,無論是蘑菇街還是其他產品都在尋找新的突破,當產品團隊嘗試做產品迭代或者產品新功能時,初期要做一些新專案的驗證,資料拉取、資料分析自然是必要的。

這部分的資料需求可能會給團隊帶來很大的壓力,一方面,對已有資料處理的主流程和資料結構有適配成本,需要考慮穩定性的風險,這部分需要投入大量的人力和時間成本;另一方面,由於這個過程時間週期比較長的,可能會影響迭代的速度,趕不上競品。

這個時候不妨試試騰訊雲 Serverless 雲函式,前面提到的 CKafka -> SCF -> CKafka 只是騰訊雲 Serverless 雲函式支援的 ETL 場景中的一條鏈路,Serverless 雲函式能支援通用的資料處理。

ETL 場景是指業務上需要做資料抽取(Extract)、資料轉換(Transform)、資料載入(Load)的場景。騰訊雲 Serverless 雲函式在這方面有很大的優勢:

  1. 更輕量,無需要購買伺服器,即可實現產品快速迭代中資料方面的需求。
  2. 更快速實現,由於學習成本低,資料團隊只需很輕鬆地寫個指令碼,上下游連結一下資料來源,中間做一些資料邏輯即可。
  3. 費用成本低,雲函式 1ms 計費原則,且只對執行的函式付費,對於有波峰波谷的業務場景,在成本方面更是節省很多。
  4. 靈活,不影響已經有專案的資料處理流程,可單獨執行並滿足資料驗證需求。
  5. 省心,從資料抓取、轉存、分析、報表,全流程都實現了。

實戰部署

說了這麼多,一起來實戰,瞭解了原理,操作起來其實也是非常簡單了。

前置條件

以廣州地域為例:

  • 開啟 Elasticsearch 服務
  • 開啟 Ckafka 服務

1. 建立雲函式

登入雲函式控制檯,選擇地域後,新建函式,選擇執行環境Python3.6,搜尋“Ckafka”,選中模板函式後,下一步。

在下一步中,點開高階設定:配置環境變數,如下:

必填引數:

ES_Address,ES_User,ES_Password,ES_Index_KeyWord

可選填入:

ES_Log_IgnoreWord(需要刪除的關鍵詞,預設則全量寫入,如填name,password)
ES_Index_TimeFormat(按照天或者小時設定Index,預設則按照天建立索引,如填hour)

在高階設定中,配置私有網路,需要選擇和 ES 相同 VPC,完成函式建立。

2. 建立 Ckafka 觸發器

在函式的【觸發管理】頁面,建立觸發器,配置對應 Topic 的觸發方式,提交後即可生效。

3. 檢視 ES 和函式執行日誌

  • 檢視函式執行日誌

  • 檢視 Kibana

  • 擴充套件能力介紹

如果想要實現高階日誌清洗邏輯,可直接在函式程式碼中修改邏輯。

針對函式的執行狀態,可以自行配置監控告警,實時感知業務執行情況。

One More Thing

立即體驗騰訊雲 Serverless Demo,領取 Serverless 新使用者禮包