博文推薦|傳智教育 x Pulsar:網際網路教育的未來

ApachePulsar發表於2021-11-19

關於 Apache Pulsar

Apache Pulsar 是 Apache 軟體基金會頂級專案,是下一代雲原生分散式訊息流平臺,集訊息、儲存、輕量化函式式計算為一體,採用計算與儲存分離架構設計,支援多租戶、持久化儲存、多機房跨區域資料複製,具有強一致性、高吞吐、低延時及高可擴充套件性等流資料儲存特性。
GitHub 地址:http://github.com/apache/pulsar/

傳智教育介紹

傳智教育(原傳智播客)是致力於高素質軟體開發人才培養的 IT 培訓公司,旗下涵蓋黑馬程式設計師、博學谷、傳智匯、酷丁魚少兒程式設計、傳智專修學院、院校邦等子品牌。

傳智教育是第一個實現 A 股 IPO 的教育企業,公司致力於培養高精尖數字化人才,主要培養人工智慧、大資料、智慧製造、軟體、網際網路、區塊鏈等數字化專業人才及資料分析、網路營銷、新媒體等數字化應用人才。

為了將更優質的教育資源惠及更多學子,傳智教育在全國開設了 19 所分校,培養了 30+ 萬 IT 從業者;出版書籍 111 本,覆蓋全國 200+ 萬高校生;釋出視訊教程 12+ 萬節,年均下載及播放量 4000+ 萬次;開展免費直播公開課 1500+ 場,年均聽課人數近百萬。

博學谷於 2016 年 7 月正式成立。依託傳智教育 15 年 IT 教育沉澱,以就業課為核心,採用個性化、隨到隨學的自適應學習模式,為學員提供零基礎入門、技能提升及職業生涯規劃為一體的 IT 線上學習服務。專注整合優勢 IT 教學資源,打造更適合線上學習的優質教學產品和服務。

面臨的問題

2020 年,疫情為我們的生活和工作帶來了巨大變化,因疫情防控需要,很多線下課程無法正常開展,更多使用者選擇通過線上學習來提升知識儲備、擴充專業能力。博學谷提供線上教學服務,成為了更多使用者的最佳選擇。隨著使用者諮詢和學習行為的大幅上漲,博學谷線上系統的壓力有所增加,對原有系統提出了新的挑戰

  • 原有系統只支援離線同步,響應較慢。
  • 需要對原有系統收集的舊資料進行同步,對新資料進行離線收集和實時收集,並且基於所有資料進行鏈路式的資料清洗和聚合分析。
  • 目前採用阿里雲 DTS(Data Transmission Service,資料傳輸服務)同步方式對業務表進行同步,成本較大且無法在同步過程中對資料進行清洗、轉換等操作。

面對規模的增長和模式的調整,博學谷需要一套更加靈活、高效的系統,以處理規模化增長的業務資料,確保業務系統的正常執行,支撐業務模式的調整,同時將資料更多地用於決策分析。

為什麼選擇 Pulsar?

我們希望藉助訊息中介軟體來解決遇到的這些挑戰。我們團隊成員有使用 RabbitMQ 和 Kafka 的經驗:RabbitMQ 比較適合輕量化場景,Apache Kafka 適用於日誌量大的場景。我們需要一套應用場景和原始碼閱讀都更全面的解決方案。在調研的過程中,我們知道市場上還有另一個深受歡迎的訊息系統 Apache Pulsar。對於運維團隊來說,學習這三種訊息中介軟體的都有一定的學習成本問題,而且基礎設施一旦落地再改變並不容易,所以在傳智教育的中介軟體選型上我們進行了充分調研。調研角度主要包括:

  • 支援訊息流式處理,確保訊息處理順序
  • 支援“僅一次”語義訊息處理
  • 支援訊息永久持久化,儲存規模易於擴充套件
  • 雲原生部署友好,運維成本較低
  • 原始碼質量好,社群活躍度高

我們發現 Pulsar 是一款雲原生的訊息和事件流平臺,內建的很多特性正好滿足我們的需求。例如:Pulsar 採用計算與儲存分離的架構設計,在 Apache BookKeeper 上儲存資料,在 broker 上進行 Pub/Sub 相關的計算,具備 IO 隔離的特性。和傳統的訊息平臺(如 Kafka)相比,Pulsar 的架構有明顯的優勢

  • Broker 和 bookie 相互獨立,可以獨立擴充套件和容錯,提升系統的可用性。
  • 分割槽儲存不受單個節點儲存容量的限制,資料分佈更均勻。
  • BookKeeper 儲存安全可靠,保證訊息不丟失,同時支援批量刷盤以獲得更高吞吐量。
  • 讀取的峰值不會影響寫入效能,讀取和寫入使用不同的物理儲存,資料的可持久化變得更加方便和廉價。

2020 年 4~9 月,我們對 Pulsar 進行了功能測試,包括訊息的順序消費、資料一致性和丟失率等。測試結果證明,Pulsar 能夠有序消費訊息、資料保持一致,並且不丟失。在不考慮有序性的應用場景下,Pulsar 可以直接當訊息佇列使用,多種訂閱模式和訂閱級別不作用於Topic,這樣多個Consumer就可以同時有序或無序消費該Topic。

在運維方面,我們可以利用 K8S (Helm) 部署 Pulsar 、Pulsar IO、Pulsar Functions;利用 pulsar-admin 簡化運維團隊部署和管理的複雜度。

在一家商業公司,採用任何一項新技術(包括開源技術)都有一定的風險,即使這項技術具有顯著的優勢。經過了深思熟慮和充分調研,我們最終決定引入 Apache Pulsar。

Pulsar 在傳智教育的實踐應用

作為一個線上教育平臺,我們需要和外部交換大量的資料。我們使用第三方訊息系統容聯七陌做線上客服資料收集,採用諸葛 IO 系統採集使用者行為資料進行分析。因此我們需要一套系統將外部資料彙總起來,二次處理後,持久化到資料倉儲中,並最終得到一套符合業務分析的資料。

我們基於 Apache Pulsar 搭建了博學谷資料處理系統,通過多個名稱空間隔離各應用的資料和配置,通過 Pulsar IO、Pulsar Functions 實現資料採集、處理等。根據業務需要,部分名稱空間被配置為訊息永不過期、永久保留。得益於 Pulsar 訊息系統中計算與儲存分離的設計,系統得以靈活擴充套件儲存容量。目前生產環境部署的 Pulsar 為基於官方 v2.6.1 的修改版本,所有涉及問題修復程式碼已通過 GitHub 與社群分享,將在未來的釋出版本中修復。

通過搭建 Source 叢集對資料進行多維度採集,使用 Pulsar Functions 對採集的資料進行實時清洗等操作,在整個鏈路過程中 Pulsar Topic 採用持久化儲存,使用 Pulsar SQL[1] 方便對每個階段的資料進行資料回溯。Sink 叢集對清洗後的資料進行持久化操作。

上面這個鏈路中,我們使用了 Pulsar 的 Delay Topic 來標識會話的完成狀態,Dead Letter Topic 記錄 Sink 端消費失敗的訊息。

在開發過程中,我們發現 Pulsar Functions 在實時流(有序)場景中,Receive Fail 響應後不會中斷程式。隨後我們聯絡 Pulsar 社群,提交了 issue 和 PR ,得到了 StreamNative 團隊的快速響應和支援。這個問題目前標記在 Pulsar 2.8.0 修復,我們內部則基於 Pulsar 2.6.1 進行了補丁修復。

線上諮詢線索分析

博學谷系統使用第三方線上客服系統實現網頁端和移動端的線上諮詢功能。在此前,受到第三方服務介面的限制,線上諮詢會話資料的使用受到限制。隨著業務的增長和模式的調整,團隊希望能夠將這部分資料與客戶管理系統(CMS)相結合,更好地挖掘客戶需求、提高諮詢和反饋效率。

該第三方系統使用 HTTP API 向接入方提供資料查詢介面,並對介面訪問進行了限流處理,影響了 CMS 系統對會話資料的使用。

經分析和討論,我們設計並開發了基於 Pulsar IO 的 HTTP Polling Source 元件和 Common JDBC Sink 元件,將會話資料高效地抓取至內部 MySQL 資料庫中持久儲存,同時支援在資料採集過程中對資料進行清洗和轉換,大大提高了會話資料利用效率和使用場景。

HTTP Polling Source 是基於 HTTP 輪詢機制的資料採集訊息源,迴圈執行基於配置模板的 HTTP 請求,在每次請求後更新同步狀態(Offset State)至 State Storage 並將請求結果寫入下游 Pulsar Topic。

Common JDBC Sink 使用 JDBC 介面持久化結構化物件資料,支援多種 JDBC 驅動的通用結構化文件儲存處理,不僅覆蓋H2、MySQL、MariaDB、PostgreSQL 資料庫的所有資料型別,還支援 INSERT、UPDATE、UPSERT、DELETE 和 Schema Migration 操作。

使用者互動行為採集

博學谷系統使用第三方系統實現客戶端使用者行為分析功能,該商業系統的使用者行為分析功能有限,且不便於將分析維度與業務系統中的概念相結合,博學谷系統需要讓使用者行為資料產生更大的價值,以便為客戶提供更好的服務。

該商業系統提供基於 Apache Kafka 早期版本(v0.8)的資料訂閱服務,Pulsar 內建的 Kafka Source 並不支援這一 Kafka 版本。通過方案評估,我們將現有的支援 Kafka v0.8 版本的訂閱程式包裝為 Pulsar IO Source 介面,即 Legacy Kafka Source。該介面支援 Kafka v0.8 版本的日誌訊息源,用於將從 Kafka 中訂閱到的資料高效地儲存至 Pulsar Topic 中,以支援下游靈活處理資料,支撐如異常行為研判、學習效果評估等功能。

資料變更日誌採集

隨著業務系統的演進,採集業務變更日誌逐漸成為研發團隊的負擔。目前,研發團隊通過額外的資料庫表來記錄業務資料的變更歷史,如訂單變更記錄、流程流轉記錄等。開發人員需要熟悉資料庫表的設計,並在表結構發生變更時謹慎地調整日誌記錄功能;為保證關鍵資料完整性,還需將資料變更和日誌寫入在同一個事務中,對系統效能產生了一定的影響。

通過基於 MySQL Replication 協議的 MySQL Binlog Connector,可以將業務系統資料庫中的資料變更事件實時同步到 Pulsar Topic 中,利用 Pulsar 的流式訊息處理機制,確保在下游按順序處理訊息一次。通過這種方式自動生成資料變更日誌,支援 DDL 變更自動遷移,支援下游使用多種日誌儲存機制(MySQL、ElasticSearch 等)持久化業務日誌,減少對業務系統程式碼的侵入,降低對業務系統效能的影響。

MySQL Binlog Connector 有兩個元件:MySQL Binlog Source 和 MySQL Binlog Sink。MySQL Binlog Source 用於採集原始 Binlog Event 資料,以事務為單位向下遊傳送訊息,使用 Binlog Filename/Position 或 GTID Set 作為同步資料的偏移量儲存至 State Storage 中。MySQL Binlog Sink 通過在下游資料庫中回放(以事務為單位) Binlog Event 訊息,處理這些資料,將 DML 或 DDL 變更同步至下游資料庫例項中。

資料實時脫敏同步

開發資料處理系統時,資料安全始終是研發團隊的工作重點,如何在確保敏感資訊不被非法訪問的前提下更好地挖掘資料的價值成為亟需處理的問題。目前我們團隊使用阿里雲 DTS 或內部 ETL 工具將業務資料同步至分析型資料庫(OLAP)中,實現資料分析類需求,但此類方案並不能很好地在同步過程中將敏感資訊進行脫敏處理。

基於資料變更日誌採集模組的工作積累,設計並實現了基於 MySQL Binlog Source 的資料實時脫敏同步方案。該方案利用已儲存至 Pulsar Topic 中的 Binlog Event 資訊,基於 Pulsar Functions 開發脫敏處理 function,根據規則引擎匹配脫敏處理方法,再通過 Common JDBC Sink 將脫敏後的資料持久化到分析型資料庫中,提高了資料同步方案的擴充套件性和靈活性。

我們使用 Pulsar 解決了原有收集系統採集效率低、延遲率高的問題,並且針對多資料來源相容了不同的收集方式;同時在同步生產業務庫方面,使用 Pulsar 替換掉了原有成本較大的 DTS 方案,鏈路式地進行資料脫敏,保證資料安全的同時也方便了資料分析團隊能夠更好更高效地利用資料。

未來規劃

基於傳智教育資訊建設的總體規劃,集合博學谷的實際需求,未來我們會繼續挖掘資料處理系統的價值,更好地利用 Apache Pulsar 這一優秀的訊息系統,支撐系統執行和業務發展。

  • 通過資料變更日誌採集方案簡化業務日誌功能的開發
  • 使用資料實時脫敏同步方案替換阿里雲 DTS
  • 實現使用者異常行為研判、學習效果評估、操作歷史回放
  • 建設跨部門的資料交換系統

致謝

感謝 Apache Pulsar 社群和 StreamNative 團隊的支援,博學谷資料處理系統的建設和未來發展離不開開源社群的優秀貢獻。博學谷研發團隊將繼續推進 Apache Pulsar 系統在公司業務系統建設中的應用,並鼓勵團隊成員更多地參與到開源社群活動中,與大家共同成長。

總結

在調研、使用 Pulsar 過程中,我們充分利用了 Pulsar Functions、Pulsar IO 等諸多 Pulsar 的原生特性,也根據需求進行了部分優化。作為下一代雲原生分散式訊息流平臺,Pulsar 的社群十分活躍,日益壯大。未來,我們計劃基於 Pulsar 構建多維度的資料流規則引擎,使用 Pulsar 搭建集團電商平臺基礎中介軟體服務,增加 Pulsar 在傳智教育的應用場景。

作者簡介及照片

孫長宇 傳智教育博學谷研發主管

劉梓霖 博學谷基礎架構研發工程師

相關閱讀

引用連結

[1] Pulsar SQL : https://pulsar.apache.org/doc...

[2] 傳智教育官網: http://www.itcast.cn/

[3] Pulsar 官方文件: https://pulsar.apache.org/doc...

[4] Debezium 官網: https://debezium.io/

[5] Trino 官網: https://trino.io/

[6] Binlog Connector : https://github.com/shyiko/mys...

[7] 容聯七陌: https://www.7moor.com/

[8] 諸葛IO: https://zhugeio.com/

[9] DTS : https://help.aliyun.com/produ...

點選 連結 ,獲取 Apache Pulsar 硬核乾貨資料!

相關文章