案例研究
LinkedIn

「Apache Beam 使 LinkedIn 能夠透過利用最新的資料並即時處理,來創造及時的推薦和個人化體驗,最終造福 LinkedIn 全球超過 9.5 億的廣大會員。」

Bingfeng Xia
LinkedIn 工程經理

革新即時串流處理:LinkedIn 每日處理 4 兆筆事件

背景

在 LinkedIn,Apache Beam 在串流處理基礎設施中扮演著關鍵角色,該基礎設施每天透過多個生產資料中心的 3,000 多個管道處理超過 4 兆筆事件。這個強大的框架為關鍵服務和平台提供近即時資料處理能力,範圍從機器學習和通知到反濫用 AI 模型。擁有超過 9.5 億的會員,確保我們的平台順利運行對於連結全球會員的機會至關重要。

在本案例研究中,LinkedIn 工程經理 Bingfeng Xia 和資深技術人員 Xinyu Liu 闡明了 Apache Beam 程式設計模型的統一、可移植和使用者友善的資料處理框架如何促成許多複雜的用例,並徹底改變了 LinkedIn 的串流處理。這項技術透過 Apache Samza 和 Apache Spark 執行器統一串流和批次處理,將服務成本優化了 2 倍,實現了即時 ML 特徵生成,將新管道的生產時間從數月縮短到數天,允許以每秒超過 300 萬次查詢的速度處理時間序列事件,等等。對於我們的會員而言,這意味著我們能夠提供更準確的工作推薦、改善動態消息推薦,並更快地識別假冒個人檔案等等。

LinkedIn 開源生態系統與 Beam 之旅

LinkedIn 在積極為開源社群做出貢獻方面有著悠久的歷史,透過創建、管理和使用各種開源軟體專案來展現其承諾。LinkedIn 工程團隊已在多個類別中開源了超過 75 個專案,其中有幾個專案獲得廣泛採用,並成為Apache 軟體基金會的一部分。

為了實現大量資料的擷取和即時處理,LinkedIn 主要使用內部開發(並隨後開源)的工具構建了一個客製化的串流處理生態系統。2010 年,他們推出了 Apache Kafka,這是 LinkedIn 即時基礎設施的關鍵大數據擷取骨幹。為了從批次導向處理轉型並在幾分鐘或幾秒鐘內回應 Kafka 事件,他們建立了一個內部分散式事件串流框架 Apache Samza。這個框架連同用於批次處理的 Apache Spark,構成了 LinkedIn 資料處理作業的 lambda 架構的基礎。隨著時間的推移,LinkedIn 工程團隊擴展了串流處理生態系統,增加了更多專有工具,例如 Brooklin(促進跨多個儲存和訊息傳遞系統的資料串流)和 Venice(作為擷取批次和串流處理作業輸出的儲存系統)等等。

儘管以 Apache Samza 為核心的串流處理生態系統支援大規模有狀態資料處理,但 LinkedIn 不斷發展的需求需要更高的可擴展性和效率,以及更低的串流管道延遲。lambda 架構方法導致了操作上的複雜性和效率低下,因為它需要維護兩個不同的程式碼庫和兩個不同的批次和串流資料引擎。為了應對這些挑戰,資料工程師尋求更高層次的串流處理抽象和現成的進階聚合和轉換支援。此外,他們需要能夠在批次模式下試驗串流管道。由於新興的機器學習用例需要 Python,因此在整體以 Java 為主的團隊中,對多語言支援的需求也日益增加。

2016 年 Apache Beam 的發布證明是 LinkedIn 的遊戲規則改變者。Apache Beam 為批次和串流處理提供了一個開源、進階的統一程式設計模型,使得在各種應用程式中建立大規模通用資料基礎設施成為可能。憑藉對 Python、Go 和 Java SDK 的支援以及豐富、多功能的 API 層,Apache Beam 為建構複雜的多語言管道並在任何引擎上執行它們提供了理想的解決方案。

當我們開始研究 Apache Beam 時,我們意識到它是一個非常吸引 LinkedIn 需求的資料處理框架:它不僅提供進階的 API,還允許聚合串流和批次處理以及多語言支援。這一切都是我們所尋找的,而且是開箱即用的。

Xinyu Liu
LinkedIn 資深技術人員

意識到 Apache Beam 的統一資料處理 API、進階功能和多語言支援的優勢,LinkedIn 開始加入其第一個用例,並在 2018 年為 Beam 開發了 Apache Samza 執行器。到 2019 年,Apache Beam 管道為多個關鍵用例提供支援,並且該程式設計模型和框架在 LinkedIn 團隊中得到廣泛採用。Xinyu Liu 在2019 年歐洲 Beam 峰會上展示了遷移到 Apache Beam 管道的好處。

scheme

LinkedIn 的 Apache Beam 用例

統一串流和批次管道

LinkedIn 遷移到 Apache Beam 管道的一些第一個用例涉及即時計算和定期回填。其中一個範例是 LinkedIn 的標準化流程。標準化包含一系列使用複雜 AI 模型將 LinkedIn 使用者輸入(例如職稱、技能或教育經歷)對應到預定義的內部 ID 的管道。例如,將目前職位列為「首席資料科學家」的 LinkedIn 會員,其職稱會被標準化以獲得相關的工作推薦。

LinkedIn 的標準化流程需要即時處理以反映立即的使用者更新,並在引入新的 AI 模型時定期回填以刷新資料。在採用 Apache Beam 之前,將回填作為串流作業執行需要在記憶體中消耗超過 5,000 GB-小時,在總 CPU 時間中消耗近 4,000 小時。這種沉重的負載導致回填時間延長和擴展問題,導致回填管道成為共同定位的串流管道的「吵雜鄰居」,並且無法滿足延遲和吞吐量要求。儘管 LinkedIn 工程師考慮將回填邏輯遷移到批次 Spark 管道,但由於維護兩個不同程式碼庫的不必要開銷,他們放棄了這個想法。

我們提出了一個問題:是否有可能只維護一個程式碼庫,但能夠將其作為批次作業或串流作業執行?統一的 Apache Beam 模型就是解決方案。

Bingfeng Xia
LinkedIn 工程經理

Apache Beam API 使 LinkedIn 工程師能夠在統一的 Apache Beam 管道中實作一次業務邏輯,該管道可以有效處理即時標準化和回填。Apache Beam 提供 PipelineOptions,能夠配置和客製化各種方面,例如管道執行器和執行器特定的配置。Apache Beam 轉換的可擴展性使 LinkedIn 能夠建立一個自訂複合轉換,以抽象化 I/O 差異,並根據資料來源類型(有界或無界)動態切換目標處理。此外,Apache Beam 對底層基礎設施的抽象化以及「一次編寫,隨處執行」的能力使 LinkedIn 能夠在資料處理引擎之間無縫切換。根據目標處理類型、串流或批次,統一的 Apache Beam 標準化管道可以透過 Samza 叢集作為串流作業部署,或透過 Spark 叢集作為批次回填作業部署。

scheme

數百個串流 Apache Beam 作業現在為即時標準化提供支援,全天候 24 小時監聽事件,使用來自遠端表格的額外資料來豐富串流,執行必要的處理,並將結果寫入輸出資料庫。批次 Apache Beam 回填作業每週執行一次,有效處理 9.5 億個會員檔案,速度超過每秒 40,000 個檔案。Apache Beam 將資料點推導到複雜的 AI 和機器學習模型中,並結合工作類型和工作經驗等複雜資料,從而對使用者資料進行標準化以進行搜尋索引或執行推薦模型。

將回填邏輯遷移到統一的 Apache Beam 管道並以批次模式執行,使記憶體和 CPU 使用效率顯著提高了 50%(從約 5000 GB-小時和約 4000 CPU 小時降至約 2000 GB-小時和約 1700 CPU 小時),並且處理時間令人印象深刻地加速了 94%(從 7.5 小時降至 25 分鐘)。有關此用例的更多詳細資訊,請參閱 LinkedIn 的工程部落格

反濫用和近即時 AI 模型

LinkedIn 堅定地致力於為其會員創造一個可信賴的環境,並且這種奉獻精神延伸到防範平台上的各種濫用行為。為了實現這一目標,LinkedIn 的反濫用 AI 團隊在創建、部署和維護 AI 和深度學習模型方面發揮著至關重要的作用,這些模型可以偵測和防止不同形式的濫用行為,例如偽造帳戶創建、會員檔案抓取、自動垃圾郵件和帳戶接管。

Apache Beam 加強了 LinkedIn 的內部反濫用平台 Chronos,使近乎即時的濫用偵測和預防成為可能。Chronos 依賴兩個串流 Apache Beam 管道:篩選管道和模型管道。篩選管道從 Kafka 讀取使用者活動事件,擷取相關欄位,聚合和篩選事件,然後為下游 AI 處理產生經過篩選的 Kafka 訊息。隨後,模型管道會消耗這些經過篩選的訊息,在特定時間視窗內聚合會員活動,觸發 AI 評分模型,並將產生的濫用分數寫入各種內部應用程式、服務和儲存以進行離線處理。

scheme

Apache Beam 的可插拔架構的彈性以及各種 I/O 選項的可用性,將反濫用管道與 Kafka 和鍵值儲存無縫整合。LinkedIn 大幅縮短了標記濫用行為所需的時間,從 1 天縮短到僅 5 分鐘,並以每秒超過 300 萬次查詢的驚人速度處理時間序列事件。Apache Beam 實現了近乎即時的處理,顯著加強了 LinkedIn 的反濫用防禦。近線防禦能夠在抓取器開始抓取後幾分鐘內捕獲它們,這使得偵測已登入的抓取個人資料的準確度提高了 6% 以上。

Apache Beam 實現了革命性的、非凡的效能提升 - 反濫用處理從 1 天加速到 5 分鐘。我們看到偵測已登入的抓取個人資料的準確度提高了 6% 以上。

Xinyu Liu
LinkedIn 資深技術人員

通知平台

作為一個社群媒體網路,LinkedIn 非常依賴即時通知來推動會員參與。為了實現這一目標,Apache Beam 和 Apache Samza 共同為 LinkedIn 的大型通知平台提供動力,該平台生成通知內容、精確定位目標受眾,並確保內容的及時性和相關性分發。

串流 Apache Beam 管道具有複雜的業務邏輯,並以近乎即時的方式處理大量的數據。這些管道從超過 9.5 億的 LinkedIn 會員中獲取、聚合、分割和處理事件,並將數據饋送到下游的機器學習模型。機器學習模型基於接收會員的歷史行為,對每秒數百萬個候選通知執行分散式目標定位和可擴展的評分,並針對每個通知即時為接收者做出個人化的決策。因此,LinkedIn 會員可以透過正確的管道收到及時、相關且可操作的基於活動的通知,例如連線邀請、職位推薦、每日新聞摘要以及社群網路中的其他活動。

先進的 Apache Beam API 提供了開箱即用的複雜聚合和篩選功能,其程式設計模型允許創建可重複使用的元件。這些功能使 LinkedIn 能夠加速開發並簡化通知平台的擴展,因為他們將更多的通知使用案例從 Samza 過渡到 Beam 管道。

LinkedIn 的用戶參與度很大程度上取決於我們發送相關通知的及時性。Apache Beam 為這項至關重要的業務使用案例啟用了可擴展的、近乎即時的基礎架構。

Bingfeng Xia
LinkedIn 工程經理

即時 ML 特徵生成

LinkedIn 的核心功能(例如職位推薦和搜尋資訊流)嚴重依賴機器學習模型,這些模型會消耗與公司、職位發佈和會員等各種實體相關的數千個特徵。然而,在採用 Apache Beam 之前,原始的離線機器學習特徵生成管道在會員行為與這些行為對推薦系統的影響之間存在 24 到 48 小時的延遲。這種延遲導致錯失機會,因為系統缺乏關於不常使用會員的足夠數據,並且未能捕捉到頻繁使用會員的短期意圖和偏好。為了響應對可擴展的即時機器學習特徵生成平台日益增長的需求,LinkedIn 轉向 Apache Beam 來應對這一挑戰。

LinkedIn 以 Managed Beam 作為基礎,開發了一個用於機器學習特徵託管的平台。該機器學習平台為 AI 工程師提供即時特徵和高效的管道編寫體驗,同時抽象化部署和操作複雜性。AI 工程師使用 Managed Beam 建立特徵定義並部署它們。當 LinkedIn 會員在平台上採取行動時,串流 Apache Beam 管道會透過篩選、處理和聚合即時發佈到 Kafka 的事件,生成更新的機器學習特徵,並將其寫入特徵商店。此外,LinkedIn 還引入了其他 Apache Beam 管道,負責從特徵商店檢索數據、處理數據並將其饋送到推薦系統。

scheme

強大的 Apache Beam 串流處理平台在消除會員行為與數據可用性之間的延遲方面發揮了關鍵作用,實現了僅幾秒鐘的令人印象深刻的端到端管道延遲。這種顯著的改進使 LinkedIn 的機器學習模型能夠利用最新的資訊,並為我們的會員提供更個人化和及時的推薦,從而顯著提高了業務指標。

託管串流處理平台

隨著 LinkedIn 的數據基礎架構擴展到包含 3,000 多個 Apache Beam 管道,以滿足各種業務使用案例,LinkedIn 的 AI 和數據工程團隊發現他們不堪重負,需要 24 小時全天候管理這些串流應用程式。AI 工程師在建立新管道時遇到了幾個技術挑戰,包括將多個串流工具和基礎架構整合到其框架中的複雜性,以及在部署、監控和操作方面對底層基礎架構的知識有限。這些挑戰導致耗時的管道開發週期,通常持續一到兩個月。Apache Beam 使 LinkedIn 能夠創建 Managed Beam,這是一個託管的串流處理平台,旨在簡化和自動化內部流程。這個平台讓團隊更容易、更快地開發和操作複雜的串流應用程式,同時減輕隨時待命支援的負擔。

scheme

Apache Beam SDK 使 LinkedIn 工程師能夠創建自訂的工作流程元件作為可重複使用的子 DAG(有向無環圖),並將它們公開為標準的 PTransforms。這些 PTransforms 充當新管道的現成組件,顯著加快了 LinkedIn AI 工程師的編寫和測試過程。透過抽象化底層引擎和執行環境的低階細節,Apache Beam 允許工程師僅專注於業務邏輯,進一步加快了開發時間。

當管道準備好部署時,Managed Beam 的中央控制平面開始發揮作用,提供基本的功能,如部署 UI、操作儀表板、管理工具和自動化的管道生命週期管理。

Apache Beam 的抽象化有助於在建置、部署和執行時將使用者程式碼與框架演進隔離。為了確保執行程式進程與使用者定義函數 (UDF) 分離,Managed Beam 將管道業務邏輯和框架邏輯打包為兩個單獨的 JAR 檔案:無框架成品和框架成品。在 YARN 叢集上執行管道期間,這些管道成品在 Samza 容器中作為兩個不同的進程執行,透過 gRPC 進行通訊。這種設置使 LinkedIn 能夠利用自動化的框架升級、可擴展的 UDF 執行、便於疑難排解的日誌分離以及多語言 API,從而提高彈性和效率。

scheme

Apache Beam 也支撐了 Managed Beam 的自動調整大小控制器工具,該工具可自動調整硬體資源並為串流管道提供自動修復功能。串流 Apache Beam 管道以 Kafka 主題的形式自行報告診斷資訊,例如指標和關鍵部署日誌。此外,LinkedIn 的內部監控工具會報告執行階段錯誤,例如心跳失敗、記憶體不足事件和處理延遲。Apache Beam 診斷處理器管道會聚合、重新分割和視窗化這些診斷事件,然後將它們傳遞給自動調整大小控制器,並將它們寫入 Apache Pinot,這是 LinkedIn 用於 Managed Beam 操作和分析儀表板的 OLAP 商店。根據預先處理和時間視窗化的診斷數據,自動調整大小控制器會生成調整大小操作或重新啟動操作,然後將它們轉發到 Managed Beam 控制平面。然後,Managed Beam 控制平面會擴展 LinkedIn 的串流應用程式和叢集。

Apache Beam 有助於簡化操作管理,並實現完全自動化的自動調整大小,顯著縮短了新應用程式的加入時間。以前,加入需要大量的「嘗試錯誤」手動迭代以及對內部系統和指標的深入了解。

Bingfeng Xia
LinkedIn 工程經理

Apache Beam 的可擴展性、可插拔性、可移植性和抽象化構成了 LinkedIn Managed Beam 平台的基礎。Managed Beam 平台將編寫、測試和穩定串流管道的時間從幾個月縮短到幾天,促進了快速實驗,並且幾乎完全消除了 AI 工程師的操作成本。

總結

Apache Beam 在徹底改變和擴展 LinkedIn 的數據基礎架構方面發揮了關鍵作用。Beam 強大的串流功能為關鍵業務使用案例實現了即時處理,每天透過 3,000 多個管道處理超過 4 兆個事件。

Apache Beam 的多功能性使 LinkedIn 的工程團隊能夠針對各種業務使用案例優化其數據處理。

  • Apache Beam 的統一和可移植框架使 LinkedIn 能夠將串流和批次處理整合到統一的管道中。這些統一的管道使服務成本優化了 2 倍、處理效能提高了 2 倍,以及記憶體和 CPU 使用效率提高了 2 倍。
  • LinkedIn 的反濫用平台利用 Apache Beam 從 Kafka 中近乎即時地處理用戶活動事件,在標記濫用行為方面實現了從幾天到幾分鐘的顯著加速。近線防禦能夠在抓取器開始抓取後幾分鐘內捕獲它們,這使得偵測已登入的抓取個人資料的準確度提高了 6% 以上。
  • 透過採用 Apache Beam,LinkedIn 能夠從具有 24 到 48 小時延遲的離線機器學習特徵生成管道過渡到具有毫秒或秒級端到端管道延遲的即時平台。
  • Apache Beam 的抽象化和強大的程式設計模型使 LinkedIn 能夠建立完全託管的串流處理平台,從而促進了新管道的更容易編寫、測試和部署,並將新管道的上市時間從幾個月縮短到幾天。

Apache Beam 擁有無縫的隨插即用功能,與 LinkedIn 的 Apache Kafka、Apache Pinot 和其他核心技術順利整合,同時確保大規模的最佳效能。隨著 LinkedIn 不斷嘗試新的引擎和工具,Apache Beam 的可移植性使我們的生態系統能夠在底層基礎架構發生任何變更時具有前瞻性。

透過為關鍵業務使用案例啟用可擴展的、近乎即時的基礎架構,Apache Beam 使 LinkedIn 能夠利用最新的數據並即時處理數據,從而創造及時的推薦和個人化的體驗,最終使 LinkedIn 全球超過 9.5 億的龐大會員網路受益。

Xinyu Liu
LinkedIn 資深技術人員



這些資訊對您有幫助嗎?