推特大規模應用的流處理框架:Apache Heron
Apache Heron是實時、分散式、容錯的流處理引擎。自 2014 年以來,Heron 為 Twitter 的各種用例提供了所有實時分析的支援。事件報告下降了一個數量級,證明了經過驗證的可靠性和可擴充套件性。
從一開始,Heron 就被設想為一種新型的流處理系統,旨在滿足最苛刻的技術要求,處理甚至最大規模的工作負載,並滿足各種規模和複雜程度的組織的需求。
Heron/Storm 可以實現亞秒級實時報告。Spark 在混合小批次處理方面處於中間位置。據報導,Twitter 已經使用 Heron/Storm 跟蹤所有推文中的字數以找到熱門話題,其中一條新推文進入整個網路更新的字數之間的延遲為 100 毫秒。
與Storm關係
Twitter 將其構建的“下一代 Storm”專案分享給Apache。這是 Twitter 的一個內部團隊對 Apache Storm 進行的徹底重寫。作為開源專案歷史回顧,Apache Storm 最初由一家名為 Backtype 的初創公司構建,該專案由 Backtype 的技術創始人 Nathan Marz 領導。然後,Backtype 被 Twitter 收購,Storm 成為 Twitter 大規模流處理(推文、推文分析和其他事情)的主要元件。
然而,在某個時刻,Nathan Marz 離開了 Twitter,另一組工程師試圖在 Twitter 內部重新思考 Storm。當時還有很多圍繞 Apache Mesos 的工作正在進行。Heron 是他們對 Storm 的“重新思考”的合併,同時也使使用 Mesos 管理類似 Storm 的 Heron 叢集成為可能。
很多 Storm 是用 Java 編寫的,但“核心”是用 Clojure 編寫的。與其說是社群“機會”,不如說是放棄 Clojure 的“決定”。我的理解是,Storm 的生產採用者之一阿里巴巴做了一個從 Clojure 到 Java 的清潔移植,他們稱之為 jstorm。然後他們將該實現捐贈/提供給了 Apache Storm 專案,該專案決定基於它構建 Storm 2.x 系列。所以 Storm 1.x 仍然擁有 Clojure 核心,沿襲原始 Backtype 版本,但 2.x 來自 jstorm。Storm 2.x 的一大重點是大規模效能、延遲和背壓管理。與此同時,在 Storm 2.x 成型之前,Heron 作為一個專注於效能的 Storm 替代品而出現,它的 API 與 Storm 相容。
同時,Storm 在 1.x 系列中變得非常非常穩定,然後在 2.x 系列中從 Clojure 到 Java 進行了乾淨的重寫,主要是為了進一步提高效能。上一個穩定版/主要 Storm 版本是在 2020 年。
Storm 提供了流處理程式設計 API、多語言線協議和叢集管理方法。但是某些叢集計算問題現在可能可以在基礎設施層得到更好的解決。(比如Storm是在整個容器+docker+k8s專注於雲操作之前開發的。)Storm解決的核心問題:將資料處理建模為計算圖;執行緒、程式和節點之間的高速網路通訊;訊息傳遞保證和重試能力;可調並行性;內建監控和日誌記錄;以及更多。
Heron 與 Apache Storm 的 API 相容,因此遷移不需要更改程式碼。
定位區別:
- - Hadoop 是一個生態系統。
- - Kafka 是一個分散式日誌。
- - Storm/Heron、Samza 和 Flink 是流處理引擎。
- - Spark 是一個 Map/Reduce 框架,它使用記憶體來快取計算,以提供比其他基於磁碟的框架的一些效能提升。如果您眯眼足夠用力,它還可以進行一些流式計算。
流處理用處:
流處理的標準用例是:
- 1.豐富事件流。假設您有一個帶有 IP 地址欄位的日誌記錄流。在將日誌傳送到 Elasticsearch 之前,您希望豐富地理位置。
- 2. 視窗聚合。也許您有一個發出“登入”事件的應用程式,並且您想檢測彼此在 X 分鐘內來自不同 IP 地址的登入嘗試。
- 3. 加入多個事件流。您有多個不同的事件流,並且希望使用一些通用的連線鍵(可能是會話 ID 或類似的東西)將它們連線在一起,以計算聚合所有這些的指標。
針對 tiktok、facebook、youtube 等推薦系統的流媒體模型訓練。如果您希望模型能夠快速學習新事件,從而使它們在非常新的內容/使用者上做得更好,您將需要使用流媒體管道。
大容量自託管分散式流處理解決方案最流行的選擇仍然是 Spark、Flink 和 Kafka Streams。
Kafka流更簡單,因為它基本上只是Kafka本身之上的一個框架,因此如果您已經使用Kafka進行流資料並且沒有複雜的需求,那麼它可能是一個不錯的選擇。
Spark 和 Flink 類似。兩者都支援批處理(例如在 Hadoop 之上)和流處理。Spark 有更好的工具,但 Flink 對流視窗函式有更復雜的支援。Spark 還使用“微批處理”而不是真正的實時,因此在使用 Spark 進行流式處理時會有更多的延遲,如果這很重要的話。
相關文章
- 三種大資料流處理框架選擇比較:Apache Kafka流、Apache Spark流和Apache Flink - quora大資料框架ApacheKafkaSpark
- 分散式流處理框架 Apache Storm —— 程式設計模型詳解分散式框架ApacheORM程式設計模型
- 博文推薦|使用 Apache Pulsar 和 Scala 進行事件流處理Apache事件
- 使用RabbitMQ訊息佇列來處理大規模的資料流MQ佇列
- Util應用框架基礎(五) - 異常處理框架
- 併發處理規則最佳推薦
- Apache Beam,批處理和流式處理的融合!Apache
- Flink 流處理在中信建投證券的實踐與應用
- web開發安全框架中的Apache Shiro的應用Web框架Apache
- Serverless 在大規模資料處理的實踐Server
- Apache SeaTunnel資料處理引擎適配的演進和規劃Apache
- MPP(大規模並行處理)簡介並行
- FME 應用cad處理
- Streams 流處理
- Scala在Databricks的大規模應用
- 用Java實現Stream流處理中的滑窗Java
- Strategy Analytics:2021年全球平板電腦應用處理器市場規模達到30億美元
- Apache POI處理Excel文件ApacheExcel
- 應用中的錯誤處理概述
- Vaex助力高效處理大規模資料集
- Flink的流處理API(二)API
- Flink流處理的演變
- python應用:異常處理Python
- Strategy Analytics:2017年全球平板電腦應用處理器(AP)市場規模達到20億美元
- Strategy Analytics :2021年全球平板應用處理器市場規模達30億美元 蘋果佔62%蘋果
- Docker在公有云的應用處理能力Docker
- MPP大規模並行處理架構詳解並行架構
- java處理流 和節點流(在位元組流和字元流中,又分為處理流和節點流)Java字元
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何選擇流處理框架SparkORMKafka框架
- 安卓應用安全指南5.5.2處理隱私資料規則書安卓
- 流資料處理利器
- 什麼是流處理
- SAP UI5應用裡的列表處理UI
- 影像處理的實現與應用(Elixir 版)
- 影像處理的實現與應用(TypeScript 版)TypeScript
- 影像處理的實現與應用(PHP 版)PHP
- 影像處理的實現與應用(Ruby 版)
- 影像處理的實現與應用(Swift 版)Swift