歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~java
定量分析的成敗在很大程度上取決於採集,存儲和處理數據的能力。若能及時地向業務決策者提供深入並可靠的數據解讀,大數據項目就會有更多機會取得成功。shell
現在,爲數據處理設計合適的架構須要下很大工夫。數據處理主要包括 3 個方面:bash
大數據項目的工程很是耗時,而且要利用合適的技能來解決數據採集和處理的問題,由於這些問題的解決對大多數方案來講都是必不可少的。Pivotal 曾推出了 Spring XD 和 Spring Cloud Dataflow 來減小大數據工程的開銷。本文將簡要介紹 Spring XD,以及該技術的最新版本,即 Spring Cloud Data Flow 的各方面細節。服務器
Spring XD 是第一輪技術創新的產物。它爲一些常見的與數據處理有關的任務提供了一種易用的解決方案。Spring XD 創建在了歷經考驗的 Spring 技術之上,併爲數據攝入、移動、處理、深度分析、流處理和批處理提供了支持。架構
Spring XD 爲實時處理以及批處理提供了一個精巧、穩定,且可擴展的框架。用 Spring XD 來採集數據,並將數據從各類數據源移到目標會更加容易。框架
Spring XD 架構在傳統企業級 ETL(數據抽取、轉換與加載的流程),實時分析和數據科學項目工做臺的建立中獲得了普遍應用。分佈式
下圖描述了基於 Spring XD 的架構。在下圖這些模塊的幫助下,咱們能夠建立、運行、部署並銷燬數據管道,並對管道中的數據進行各類各樣的處理。微服務
Spring XD 的主要組件是 Admin 和 Container。oop
如下是 Spring XD 體系結構中的一些關鍵模塊。大數據
應用方面的需求老是在變化。這逐漸揭示了 Spring XD 的缺陷和對新一輪的技術創新的需求。如下是一些對新型框架最重要的需求:
做爲第二輪技術創新,Pivotal 推出了 Spring Cloud Data Flow 來替代原來的 Spring XD。Spring Cloud Data Flow 繼承了 Spring XD 的優點,並經過利用雲原生(cloud native)方法提供了更具可擴展性的解決方案。Spring Cloud Data Flow 是一個混合的計算模型,能夠將流處理和批處理統一塊兒來。開發人員能夠利用 Spring Cloud Data Flow 來建立並操做數據管道來進行處理數據攝入、實時分析和批處理等常見流程。Spring Cloud Data Flow 只會提供一個管理服務模型,旨在精簡數據項目的工程量,並讓開發人員將精力集中在具體問題及對問題的分析上。
從 Spring XD 到 Spring Cloud Data Flow,對功能的結構以及利用雲原生架構擴展應用程序方法發生了從根本上的改變。
Spring Cloud Data Flow 從傳統的基於組件的架構轉向了採用更適合雲原生應用的,由消息驅動的微服務架構。如今 Spring XD 模塊已經被部署在雲端上的微服務取代了。
具體地說,Spring Cloud Data Flow 在如下方面有着一些重大變化:
Spring Cloud Data Flow 的組件:
上圖描繪了使用 Spring Cloud Data Flow 模型建立的一個典型數據流。
做爲 Spring Boot 微服務,數據源,做業,數據接收器和數據處理器均可以部署在 Cloud Foundry, Lattice 或 Yarn 集羣上。經過使用部署在雲原平生臺上的這些微服務,咱們能夠建立數據管道並將其輸入到 Yarn,Lattice 或基於 Cloud Foundry 的目標中。平臺特定的 SPI(服務提供者接口)會被用於發現和綁定微服務,以及綁定基於開發平臺的渠道(channel)。
使用 Spring Cloud Data Flow 的真正好處是可以使用一個統一的框架來快速完成構建和配置工做,並創建數據攝入和處理流程,從而使開發人員能更好地關注具體問題。
咱們不妨構建這樣一個用例來在高層面上見識一下 Spring Cloud Data Flow 的改變:在沒有自帶數據源模塊的狀況下構造一個完整的數據流,好比對 Facebook 的數據造一個數據流來分析 Facebook 的帖子。 在這種狀況下,咱們不能用在 Spring Cloud Data Flow 模塊裏能隨便用的 Facebook 數據源模塊,所以咱們須要爲 Facebook 數據源建立自定義模塊。建立一個數據流須要三個主要的微服務:數據源,數據處理器和數據接收器。這三個微服務都有相應的接口類。
Facebook 數據管道的數據源和數據接收器的微服務示例代碼片斷:
Facebook 數據源:
@SpringBootApplication
@ComponentScan(.class)
public class SourceApplication {
public static void main(String[] args) {
SpringApplication.run(SourceApplication.class, args);
}
}
@Configuration
@EnableBinding(Source.class)
public class FBSource {
@Value("${format}")
private String format;
@Bean
@InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "${fixedDelay}", maxMessagesPerPoll = "1"))
public PostSource<String> FBPostSource() {
// 一些從 Facebook 獲取帖子的邏輯
return // Facebook 帖子列表
}
}複製代碼
@EnableBindings(Source.class)
註解會檢查相應的做爲可綁定組件的接口類的實現是否存在(要在應用的 classpath 中設置,參考 Redis),而後這一組件會構建相應的渠道適配器(channel adapters)。全部微服務都會被轉變爲 Spring Boot 應用程序來實現更簡單的依賴管理。
Facebook 數據接收器:
@SpringBootApplication
@EnableBinding(Sink.class)
@ComponentScan(.class)
public class SinkApplication {
public static void main(String[] args) {
SpringApplication.run(SinkApplication.class, args);
}
}
@Configuration
public class FBSink {
private static Logger logger = LoggerFactory.getLogger(LogSink.class);
@ServiceActivator(Source.INPUT)
public void loggerSink(Object payload) {
logger.info("Received: " + payload);
}
}複製代碼
上述代碼會接收來自 Facebook 數據流的數據並將其寫入控制檯。Sink.class
在此會做爲參數傳遞給 @EnableBinding
註解。另外 @ServiceActivator
會將數據輸入模塊鏈接到上例中的終端(endpoint)控制檯。
一些做爲數據處理器的微服務將根據輸入的 SPEL 表達式過濾來自 FBSource 微服務的 Facebook 帖子,而數據處理器微服務的輸出就會是 FBSink 微服務的輸入。
Spring Cloud Data Flow 使用了 Spring Cloud stream 模塊。咱們能夠用後者來建立和運行以 Spring Boot 應用爲形式的消息傳遞微服務,以便它們能夠部署在不一樣的平臺上,獨立運行並相互交互。在使用 Spring Cloud stream 模塊建立數據管道時,Spring Cloud Data Flow 能夠充當相似膠水的角色。
目前有許多用於管理數據攝入,實時分析和數據加載的,獨立的開源項目。Spring Cloud Data Flow 則爲數據攝入,實時分析,批處理還有數據輸出提供了一個統一的,可擴展的分佈式服務。
問答
Spring Boot 如何配置端口?
相關閱讀
Spring框架系列之AOP思想
初識Spring Boot框架
Spring 事務管理基礎入門總結
此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/developer/article/1128177?fromSource=waitui