Discord x Pulsar: 使用 Pulsar、Flink 和 Iceberg 搭建流式機器學習平臺

本文整理自 Discord 機器學習工程師 David Christle 在 Pulsar Summit NA 上的演講內容,一起來看 Discord 是如何基于 Pulsar 實現兼顧安全和個性化功能的實時流式機器學習平臺的~

1. 背景

Discord 是一個實時?視頻通信平臺,?持?本/語?/視頻頻道交流,廣泛應用于1對1、中小團隊或?型社區的在線交流場景,能支持用戶從私密聊天到百萬級社區通信的不同需求。平臺于2015年創立,最初在游戲社區中流行起來,目前已擴展到多個領域,月活用戶達1.5億。

2. 挑戰

Discord 面臨的核心挑戰是升級其實時流式機器學習平臺,以應對安全和個性化需求,例如限制垃圾信息訪問或保護用戶賬戶免遭入侵。其原先架構是為啟發式規則設計的,而非機器學習。為了尋求一個穩健、可擴展且實時的解決方案,他們探索了集成 Apache Pulsar、Flink和 Iceberg 的方案。

2.1 需求

“該系統的運行速度和可擴展性是關鍵所在。”
“該框架非常強大,支持過濾、轉換、連接、聚合等操作;你在數據處理方式上擁有極大的自由度,即使在實時場景下效率也非常高。這些管道可以非常簡單,比如事件采集和去重;也可以用來完成 ETL 任務。我們能在流數據上以極低延遲進行機器學習。”

安全

  • 反垃圾郵件:通過跨職能團隊協作,最大程度避免?戶對垃圾內容和垃圾郵件發送者的接觸

  • 賬戶安全:主動保護?戶賬戶免遭?侵,并在?侵發?時實現快速檢測

  • 處理速度和可擴展性:解決?案的速度和可擴展性?關重要,直接影響?戶體驗和安全防護效果

個性化

  • 發現服務器(Discord Server,類似興趣組):幫助?戶快速發現感興趣的新服務器

  • 通知優化:實時確定最佳通知內容和發送時機,確保信息時效性

  • 響應速度:需要在?分鐘內完成相關計算,避免內容過時失效

2.2 痛點

  • 規則引擎不適合ML: 專為人工規則設計,無法處理歷史數據,基礎計算困難,導致新特征上線延遲長達一個月。

  • 批處理延遲高、整合難: 數據獲取的延遲依賴批處理的效率,手動拼接批處理與實時特征易錯難調,模型問題診斷困難。

  • 微服務臃腫低效: 每個模型獨立部署微服務帶來高復雜度與部署負擔,響應速度跟不上威脅變化,靈活性犧牲了實時性。

3. 解決方案

Discord 采用了基于 Pulsar、Flink 和 Iceberg 的實時流處理方案。其中,從 Google Cloud Pub/Sub(GCP) 遷移到 Pulsar 是一個關鍵決策,顯著提升了效率和可擴展性。Flink 和 Iceberg 則在分析實時數據、管理歷史事件以及回填(backfill)方面發揮了至關重要的作用。

“對我們而言,Pulsar 的關鍵優勢在于它不僅擁有隊列傳輸模式(這在 Discord 非常常用),還提供了分區式傳輸模式。”
“Pulsar 分區傳輸在保障順序性的同時,還能實現極低的延遲 ;我們利用這一點實現了近乎即時的水位線(watermark)體驗,并在低延遲的情況下獲得了準確的結果。”

GCP 提供了一種無狀態且無序的內部事件流量托管方案,適用于不關?時間順序的寬泛分發隊列、大規模并?處理的?狀態任務,但存在以下問題:

  • Connector:Flink-PubSub 連接器維護不?且過時;需要依賴開源 PR 才能實現統?批流 API

  • 高延遲:高達20-40s的延遲

  • 高成本:隨著規模擴大成本明顯拉高

在這種場景下,Pulsar 憑借豐富的 Connector 支持、分區和隊列雙模式、存算分離、原生多租戶支持及優秀的低延遲表現從眾多方案中脫穎而出。

基于業務需求,Discord 的工程師團隊構建了一個成熟精簡、高效靈活且突破傳統限制的生產級架構,Pulsar 在其中扮演了實時數據主干網流批融合關鍵樞紐的角色。

  • 精簡架構與生產就緒的 ML 生態系統:該方案顯著簡化了架構,減少了部署組件。工程師無需關注底層數據來源的復雜性,系統自動處理數據分區和可靠交付。利用 Flink 作業進行實時的特征計算(過濾、聚合、連接等),并將長期運行(數月)的計算結果直接輸出到 Iceberg 表中,作為高質量的訓練數據集。模型部署采用ONNX格式,兼容XGBoost、PyTorch、TensorFlow等主流框架,其二進制文件可直接嵌入Flink作業運行,完全摒棄了傳統獨立的模型服務,這不僅大幅降低了系統復雜度和潛在錯誤,也使得開發調試更簡單快速,顯著提升了開發效率。

  • 靈活流處理與混合源能力: 系統的關鍵創新在于利用 Flink 的HybridSource技術,無縫融合了批處理源(Iceberg)和流處理源(Pulsar)。Pulsar 作為核心的實時數據流來源,與 Iceberg 的歷史數據結合得天衣無縫。系統能夠在預定時間戳自動在批處理和流處理源之間透明切換,這對工程師完全隱藏了底層復雜性。這種設計確保了開發環境與生產環境數據源的高度一致性,工程師可以直接使用 Pulsar 流和 Iceberg 表進行開發測試,并支持從歷史任意時間點(數月甚至一年前)啟動作業,進行回填或調試。即使在處理海量數據時,基于 Pulsar 提供的穩定實時流和 Iceberg 的可靠存儲,系統也表現出極強的穩定性和增量處理能力。

  • 突破實時狀態與回填限制:該架構徹底解決了實時 ML 系統常見的狀態管理和歷史數據回填難題。得益于流批一體的設計(核心是 Pulsar 流與 Iceberg 表的融合)和模型內嵌于 Flink 作業的簡化架構(模型僅是作業中的一個“小方塊”),系統發生變更后,歷史數據的回填速度極快,僅需 3-4 小時即可完成。這使得快速訓練新模型并部署上線觀察效果成為現實,極大加速了模型迭代周期。運維層面,通過自定義 Bazel 規則簡化了 ML 工程師的工作流,并利用 Flink Kubernetes Operator自動化管理作業的完整生命周期(包括部署、保存點、高可用性),確保了系統的穩健運行。Pulsar 提供的持久化、可重放實時流,是支撐快速、穩定回填的關鍵基礎設施之一。

  • 關鍵安全指標提升與廣泛適用性:此系統在 Discord 最核心的安全場景(如垃圾郵件過濾和賬戶保護)中實現了兩位數的關鍵指標提升,并成功將平臺超過 60% 的安全評分決策從傳統啟發式規則遷移至實時 ML 模型驅動。這得益于 Pulsar 提供的高吞吐、低延遲實時數據流,使得系統能夠在虛假賬戶和僵尸網絡發起攻擊、造成實際損害前就進行主動檢測與攔截,顯著增強了平臺的實時防御能力。更重要的是,該架構設計具備高度通用性,其基于成熟開源技術棧(Pulsar、Flink、Iceberg)的精簡模型和流批一體能力,使其可輕松擴展應用于 A/B 測試、用戶實驗、個性化推薦等多個場景。

4. 結語

Discord 的成功實踐充分驗證了由 Pulsar、Flink 和 Iceberg 構建的實時機器學習平臺的高效性與強大潛力。利用 Pulsar 作為高吞吐、低延遲的實時數據主干網,無縫連接流處理與批處理,為 Flink 的實時特征計算和模型嵌入提供了堅實基礎。

David Christle 的分享不僅展示了這一技術棧(尤其是 Pulsar 在流批融合中的關鍵作用)的強大實力,更凸顯了小型團隊基于成熟開源技術打造精簡、高效生產系統的卓越能力。該案例也為業界探索實時機器學習融合、構建以可靠消息流(如 Pulsar)為核心的實時數據管道提供了極具參考價值的范本。

公眾號后臺發送“Discord”獲取完整演講視頻

圖片

Apache Pulsar 作為一個高性能、分布式的發布-訂閱消息系統,正在全球范圍內獲得越來越多的關注和應用。如果你對分布式系統、消息隊列或流處理感興趣,歡迎加入我們!

Github:?

https://github.com/apache/pulsar

圖片

掃碼添加pulsarbot,加入Pulsar社區交流群

最佳實踐

互聯網

騰訊BiFang?|?騰訊云?|?微信?|?騰訊?|?BIGO?|?360?|?滴滴? |?騰訊互娛?|?騰訊游戲?|?vivo?|?科大訊飛?|?新浪微博?|?金山云?|?STICORP?|?雅虎日本?|?Nutanix Beam?|?智聯招聘?

金融/計費

騰訊計費?|?平安證券?|?拉卡拉?|?Qraft?|?甜橙金融?

電商

Flipkart?|?誼品生鮮?|?Narvar?|?Iterable?

機器學習

騰訊Angel PowerFL

物聯網

云興科技智慧城市?|?科拓停車?|?華為云?|?清華大學能源互聯網創新研究院?|?涂鴉智能

通信

江蘇移動?|?移動云?

教育

網易有道?|?傳智教育

推薦閱讀

免費可視化集群管控?|?資料合集?|?實現原理?|?BookKeeper儲存架構解析?|?Pulsar運維?|?MQ設計精要?|?Pulsar vs Kafka?|?從RabbitMQ 到 Pulsar?|?內存使用原理?|?從Kafka到Pulsar?|?跨地域復制?|?Spring + Pulsar?|?Doris + Pulsar?|?SpringBoot + Pulsar?

圖片

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93398.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構入門】二叉樹(2)

目錄 1.二叉樹遍歷順序 1.1 前序(先根)遍歷 1.2 中序(中根)遍歷 1.3 后序(后根)遍歷 1.4 層序遍歷 1.5 深度優先遍歷&廣度優先遍歷 2.二叉樹的遍歷 2.1 前根遍歷(遞歸) …

【電機參數】電壓、電流、轉速標幺化推算過程

【電機參數】電壓、電流、轉速標幺化推算過程 文章目錄[TOC](文章目錄)前言一、標幺化目的——優化計算二、Q15與標幺化的關系三、標幺值計算1.電壓標幺值2.電流標幺值3.轉速標幺值四、參考資料總結前言 一、標幺化目的——優化計算 不同物理量的量綱和數值范圍差異巨大&#…

v-scale-scree: 根據屏幕尺寸縮放內容

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

linux設備驅動之字符設備驅動

一、cdev結構體?成員/功能??說明??相關操作函數/宏??kobj?內嵌的kobject對象,用于Linux設備模型管理,實現引用計數和sysfs接口kobject_init()?owner?指向擁有該結構體的模塊指針(通常為THIS_MODULE),防止模塊…

★CentOS:MySQL數據備份

一、cp 命令備份特點:優點:備份恢復數據快:直接復制文件,無需進行數據轉換和復雜的處理,因此備份恢復速度非常快缺點:需要停止數據庫服務,靈活性差,占用空間大,可移植性差…

Python代碼規范與靜態檢查(ruff/black/mypy + pyproject.toml + Makefile)自動化工具鏈介紹

文章目錄**1. 核心工具的作用****(1) black:代碼格式化工具****(2) ruff:代碼質量檢查工具****(3) mypy:靜態類型檢查工具****2. pyproject.toml:統一配置中心****示例配置**(pyproject.toml):*…

軟件需求管理過程詳解

需求管理過程需求管理是軟件工程和系統開發中的核心過程,它確保項目始終圍繞正確、穩定且可追溯的需求進行。在復雜系統開發中,需求往往動態變化,需求管理通過系統化的方法控制變更、維護版本、建立追溯關系,從而降低項目風險、保…

MySQL性能優化實戰指南:從入門到精通的完整優化體系

MySQL性能優化實戰指南:從入門到精通的完整優化體系🚀 前言:在當今數據驅動的時代,MySQL作為世界上最流行的開源關系型數據庫,其性能優化能力直接決定了應用系統的響應速度和用戶體驗。本文將從多個維度深入探討MySQL優…

KingbaseES主備讀寫分離集群安裝教程

首先我們先要找數據庫集群安裝軟件和腳本。這里我事先安裝一臺單機。 [rootlocalhost zip]# mkdir -p /home/kingbase/software [rootlocalhost zip]# scp -r * /home/kingbase/software/ #安裝軟件和腳本在單機版本的/opt/Kingbase/ES/V9/ClientTools/guitools/DeployTools/z…

electron程序適配loongArch64

一、原始項目 1.原始程序適配arm,x86國產linux設備;新增需求適配loongArch64麒麟v10sp1。 2.原始devDependencies "devDependencies": {"electron": "^17.2.0","electron-builder": "^23.0.3",}二、可能遇到的問…

窗口系統(windowing system)的架構思考

我想做一個通用窗口系統,窗口、控件等,一切都抽象成樹形結構的層疊矩形塊,可支持半透明、模糊等混合選項,那么每個窗口是不是需要一塊存儲區?我之前的代碼為了計算模糊,還不止一塊,要三塊。那么…

極簡工具箱:安卓工具箱合集

軟件介紹 極簡工具箱是一個安卓工具箱合集軟件;軟件支持安卓。 它支持將近 400 個實用功能,支持將近 40 款單機游戲,提供 140 多個實用網站導航,包括電子書導航、學習導航、設計導航、產品經理導航、大數據導航、文檔格式轉換、…

TOGAF八步一法筆記2

業務需求和驗收標準一旦方向確定,接下來的關鍵就是:創建業務需求、明確驗收標準當“預備階段”完成,能力愿景和范圍被管理層確認后,我們正式進入能力建設的“實施軌道”。而這個軌道的起點,是兩個核心動作:…

各種讀取csv文件的工具性能比較

在翻閱calamine作者的quick-csv存儲庫時無意中看到有個10年前的csv讀取比賽, 把比賽選手源程序下載下來測試看到底有多快。 git clone https://bitbucket.org/ewanhiggs/csv-game.git這些源程序只有比賽程序本身,依賴的文件有的在主頁,有的在makefile中…

HTML <iframe> 標簽 如何把html寫入iframe標簽

標簽 如何把html寫入iframe標簽 使用srcdoc屬性 HTML iframe 標簽 參考 定義和用法 <iframe> 標簽定義行內框架&#xff08;內聯框架&#xff09;。 行內框架用于在當前 HTML 文檔中嵌入另一個文檔。

Java Spark例子程序

目錄spark基礎&rdddocsRDDspark架構Spark 對比 hadoop MapReducespark maven依賴Spark的checkpointtransformations、shuffle、actionsreduceByKey的用法groupByKey的用法count / count distinct例子&#xff1a;單詞計數例子&#xff1a;一批人員年齡數據求平均(rdd)例子&…

《代碼重生:楊蓉與62.webp》

《代碼重生&#xff1a;楊蓉與62.webp》2045年&#xff0c;星耀城。雨絲斜織在量子玻璃幕墻上&#xff0c;霓虹倒影如液態代碼流淌。楊蓉坐在“時光回溯實驗室”的終端前&#xff0c;面前懸浮著一行行泛黃的日志——那是從2018年GitHub快照中提取的原始構建記錄。她指尖輕點&am…

軟考 系統架構設計師系列知識點之雜項集萃(123)

接前一篇文章:軟考 系統架構設計師系列知識點之雜項集萃(122) 第227題 某公司欲開發一種工業機器人,用來進行汽車零件的裝配。公司的架構師經過分析與討論,給出了該機器人控制軟件的兩種候選架構方案:閉環控制和分層結構。以下對于這兩者候選框架的選擇路由,錯誤的是(…

Sonatype Nexus Repository Manager docker版本安裝

docker 網址 https://hub.docker.com/r/sonatype/nexus3 拉取鏡像 docker pull sonatype/nexus3創建docker docker run -d -p 8081:8081 --name nexus --restart always sonatype/nexus3查看密碼 docker exec nexus cat /nexus-data/admin.password導出docker image 鏡像 …

Java Stream API:讓業務數據處理更優雅

在 Java 業務開發中&#xff0c;我們經常需要對集合數據進行**篩選&#xff08;filter&#xff09;、轉換&#xff08;map&#xff09;、聚合&#xff08;collect&#xff09;**等操作。比如從一批結果中過濾出符合條件的記錄&#xff0c;就像這樣&#xff1a; 假數據&#xf…