智能實時應用爲全部行業帶來了革命性變化。機器學習及其分支深度學習正蓬勃發展,由於機器學習讓計算機可以在無人指引的狀況下挖掘深藏的洞見。這種能力正是多種領域所須要的,如非結構化數據分析、圖像識別、語音識別和智能決策,這徹底不一樣於傳統的編程方式(如 Java、.NET 或 Python)。機器學習並不是新生事物,大數據集的出現和處理能力的進步讓每個企業都具有了構建分析模型的能力。各行各業都在將分析模型應用在企業應用和微服務上,用以增加利潤、下降成本,或者改善用戶體驗。 html
可伸縮的任務關鍵型實時系統git
互聯網、智能手機和持續在線思惟的出現改變了人們的行爲方式。其中就包括人們對與設備、產品和服務交互方式的期待:人們但願可以實時地得到信息。這也給企業帶來了巨大挑戰:如何快速地採起行動才能把握先機。批處理系統已經沒法知足需求,取而代之的應該是實時系統。傳統企業能夠實現很是強大的實時處理機制來知足平常的業務需求。這一般須要藉助領域知識來理解各類應用場景,並構建新的流式分析模型來增長業務價值。流式處理已經存在於各個行業中。github
全部這些場景都有一個共同點,那就是在數據產生的同時處理數據。你必須儘快地處理已經發生的事件,是主動處理,而不是被動處理。你的系統須要在欺詐發生以前,或在顧客離開商店以前,或在機器發生故障以前作出決策。算法
固然,這並非說必定要求毫秒級別的響應時間。在某些狀況下,即便是批處理也是沒有問題的。好比,大部分製造行業或物聯網場景中,預測性維護能夠容許幾個小時甚至幾天的時間間隔,更換部件能夠在當天或當週內完成。這樣能夠節省大量的金錢,由於你能夠在問題發生以前檢測出它們,避免形成更大範圍的損失。數據庫
在智能實時系統中應用機器學習apache
任務關鍵型實時應用系統在不使用機器學習的狀況下已經存在多年,那爲何說機器學習將給這一領域帶來革命性的變化? 若是你讀過有關機器學習及其分支深度學習的資料,你常常會看到以下的一些場景。編程
上述的例子與那些想要構建創新型應用系統並從競爭當中脫穎而出的企業有着愈來愈緊密的聯繫。相似的,咱們能夠將機器學習應用在「傳統場景」裏,好比欺詐檢測、交叉銷售或預測性維護,以此來加強業務流程,基於數據驅動作出更好的決策。已有的業務流程能夠保持原樣,你只須要將業務邏輯和規則替換成分析模型來改進自動化決策便可。服務器
機器學習——分析模型的開發生命週期網絡
先讓咱們瞭解一下分析模型的開發生命週期:架構
整個團隊在一開始就要在一塊兒工做,並考慮以下問題:
例如,一個數據科學家開發出一個 Python 程序,建立了一個精確度很是高的模型,但若是你沒法將它部署到生產環境(由於它沒法伸縮也沒法表現得如預期同樣),它就毫無用處。這個時候,或許你已經能夠意識到爲何 Apache Kafka 如此適合用在生產環境的分析模型上。
機器學習和 Apache Kafka 架構參考
在瞭解了機器學習開發生命週期以後,接下來咱們來看一個用於構建、營運和監控分析模型的架構參考:
該架構的核心之處在於它使用 Kafka 做爲各類數據源、模型構建環境以及生產環境應用程序之間的媒介。
用於構建模型的特徵數據從各個應用程序和數據庫流入 Kafka。模型構建環境能夠是一個數據倉庫、一個大數據環境(如 Spark 或 Hadoop)或者一個運行 Python 腳本的服務器。模型能夠被部署在某個地方,只要生產環境的應用程序可以訪問到它們,並把它們應用在輸入樣本數據上。生產環境的應用程序能夠從 Kafka 數據管道接收數據,或者使用 Kafka Streams API。
Kafka 成爲整個系統的中樞神經,這也帶來了以下好處:
除了 Kafka 自己,還能夠加入 Kafka 生態系統的其餘開源組件,如 Kafka Connect、Kafka Streams、Confluent REST Proxy、Confluent Schema Registry 或者 KSQL,而不只僅是使用 Kafka Producer 和 Consumer API。
機器學習開發生命週期示例
如今咱們來深刻了解一個圍繞 Kafka 構建的機器學習架構示例:
數據生產者持續地發送事件,分析平臺以批次或實時的方式接收這些數據,而後使用機器學習算法來構建分析模型。
在這個例子裏,咱們將模型訓練和模型推理分離開,這在當今的大部分機器學習項目中是很常見的作法。
模型推理:神經網絡被部署到 Kafka Streams 應用程序裏。Streams 應用程序能夠運行在任何地方,它能夠做爲單獨的 Java 進程運行,也能夠運行在 Docker 容器裏或 Kubernetes 集羣上。模型被實時地應用在每個新生成的事件上。Kafka Streams 藉助 Kafka 集羣爲咱們提供了可伸縮、任務關鍵型的分析模型操做以及高性能的模型推理。
在線模型訓練:除了分離模型訓練和模型推理,咱們也能夠爲在線模型訓練構建一個完整的基礎設施。不少巨頭科技公司(好比 LinkedIn)在過去就將 Apache Kafka 做爲模型的輸入、訓練、推理和輸出的基礎。固然,這種作法存在一些權衡。大部分傳統的公司會使用第一種方案,它能夠知足現今大部分的使用場景。
模型監控和告警:將分析模型部署到生產環境只是第一步,對模型的準確性、分數、SLA 和其餘度量指標進行監控並自動實時地發出告警也一樣重要。度量指標能夠經過 Kafka 反饋給機器學習工具,用於改進模型。使用 H2O.ai 開發分析模型
如下是使用 H2O 來構建分析模型的例子。H2O 是一個開源的機器學習框架,它在內部使用了其餘框架,如 Apache Spark 或 TensorFlow。數據科學家能夠在上面使用他們喜歡的編程語言,如 R 語言、Python 或 Scala。H2O 引擎會生成 Java 字節碼,能夠很方便地經過 Streams 進行伸縮。
下面是使用 H2O.ai Flow(Web UI 或 Notebook)和 R 語言構建分析模型的截圖:
輸出的是一個字節碼形式的分析模型,它能夠直接部署到任務關鍵型的生產環境裏。所以,咱們就再也不須要花時間去考慮如何將 Python 或 R 生成的模型「移植」到基於 Java 平臺的生產系統裏。
這個例子使用 H2O 來產生 Java 字節碼,固然,你也可使用其餘框架(如 TensorFlow、Apache MXNet 或 DeepLearning4J)完成相似的工做。
使用 Kafka Steams API 部署分析模型
使用 Kafka Streams 來部署分析模型很是簡單,只要將模型添加到基於 Streams 構建的應用程序裏就能夠了,而後將其應用在新生成的事件上。
由於 Kafka Streams 應用程序實際上用到了 Kafka 的特性,因此已經具有了伸縮性和任務關鍵型用途,不須要對模型作出任何調整。 例子的代碼能夠在 GitHub 上找到: https://github.com/kaiwaehner/kafka-streams-machine-learning-examples 拉取項目代碼,運行 maven 構建命令,就能夠看到 H2O 模型是如何與 Kafka Streams 應用集成在一塊兒的。後續咱們會不斷擴充這個例子,加入更多複雜的應用場景,不只使用 H2O,還會加入 TensorFlow 和 DeepLearning4J。
藉助一些 CI/CD 工具,如 Maven、Gradle、Chef、Puppet、Jenkins,機器學習與流式處理相結合的方式能夠很容易地被集成到自動化持續集成工做流當中。
使用開放標準在訓練和推理之間共享分析模型
如下是其餘一些用於在數據科學家之間共享和更新模型以及 DevOps 團隊部署模型的方式。
以上這些方案之間存在權衡的關係。例如,PFA 帶來了獨立性和可移植性,但同時也存在一些限制。從 Kafka 角度來看,若是要部署大規模的任務關鍵型系統,使用 Java 字節碼生成的方式會更加合適,由於這種方式具備更高的性能、更容易伸縮,而且更容易嵌入到 Kafka Streams 應用中。同時,在進行模型預測時,它免去了與外部 REST 服務器交互的成本。
結論
機器學習爲行業帶來了價值,Kafka 迅速成爲不少企業的中樞神經系統。咱們能夠藉助 Kafka 來:
參考: