AWS Kinesis如何實現(xiàn)實時數(shù)據(jù)處理?
公共云計算鼓勵使用分布式應(yīng)用程序,這使得企業(yè)用戶能夠充分利用大量服務(wù)器的優(yōu)勢來運(yùn)行多個系統(tǒng)——從大型企業(yè)應(yīng)用程序到有針對性的微服務(wù)。但是,管理員們應(yīng)當(dāng)如何輕松地把所有這些數(shù)據(jù)遷往相應(yīng)的服務(wù)器呢?其中一種方法就是通過通訊總線,同時如果某個管理員希望從多個來源以近乎實時的速度遷移大容量數(shù)據(jù),那么他應(yīng)當(dāng)考慮一下亞馬遜的Kinesis。
亞馬遜Kinesis是亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)所提供的一項托管通訊服務(wù),它可為實時數(shù)據(jù)處理應(yīng)用提供高性能和低管理開銷。該服務(wù)是專為接受來自于大量來源并把數(shù)據(jù)分發(fā)到各種應(yīng)用程序的應(yīng)用而設(shè)計的。Kinesis是基于Apache Kafka的,后者提供了一個“發(fā)布-訂閱”的通訊服務(wù)。
亞馬遜Kinesis的設(shè)置
設(shè)置亞馬遜Kinesis“發(fā)布-訂閱”平臺的***步就是定義一個Kinesis流。這一工作通常在AWS管理控制臺上完成。
所謂Kinesis流,是指一組接受、存儲和傳遞消息的來源。高容量數(shù)據(jù)流可以按多個分塊進(jìn)行劃分,這一點與使用多個服務(wù)器進(jìn)行服務(wù)器集群的擴(kuò)容過程很相似。實際所需的分塊數(shù)量取決于消息的平均大小、寫操作記錄的速度以及用戶應(yīng)用程序的數(shù)量。AWS管理控制臺提供了一個可以幫助管理員估計用于滿足他們需求所需分塊數(shù)量的工具。
與其他所有的AWS資源一樣,用戶需要定義訪問控制措施。Kinesis的訪問控制措施可允許客戶自行定義用戶和角色的權(quán)限,從而讓他們可以在隊列中設(shè)置消息、獲取隊列的狀態(tài)信息和詳細(xì)內(nèi)容,并從隊列中讀取所需信息。
生產(chǎn)應(yīng)用程序可被授權(quán)向Kinesis隊列寫消息。一個消息中包括了:一個可被交付的數(shù)值或有效負(fù)載(例如一個JavaScript Object Notation結(jié)構(gòu)和鍵值對)以及一個分塊鍵。一個分塊***每秒可以接受一千個消息;而分開鍵可以最多為256個字符長。Kinesis的API提供了一個PutRecord的函數(shù),這個功能函數(shù)可以一次向一個隊列增加一個消息;PutRecords函數(shù)可供批量增加消息使用。
用戶應(yīng)用程序則涉及GetRecords API函數(shù)。一般來說,針對性的應(yīng)用程序可以在一個循環(huán)中持續(xù)不斷地運(yùn)行這個函數(shù)。每個記錄的容量最多可支持50KB。該系統(tǒng)則可在一個單一的分塊中每秒支持2MB的數(shù)據(jù)。如果用戶需要更多的數(shù)據(jù)流量,可在他的流中增加更多的分塊。GetRecords函數(shù)還支持一個LIMIT參數(shù),該參數(shù)主要用于指定在單一的一次調(diào)用中支持的***記錄數(shù)。管理員們可以使用這個功能函數(shù)來設(shè)置用戶應(yīng)用程序所接受的數(shù)據(jù)量,尤其是在高峰期向消息隊列執(zhí)行寫操作時。
亞馬遜Kinesis的短板
當(dāng)談及實時數(shù)據(jù)處理應(yīng)用時,Kinesis還有這一些局限性。該服務(wù)最多可保留消息24小時。這一點不同于Kafka,后者可以按照實際要求進(jìn)行配置,其存儲周期可更長。IT團(tuán)隊?wèi)?yīng)當(dāng)為應(yīng)用程序的運(yùn)行分配足夠的資源以便于應(yīng)用程序能夠在24小時內(nèi)讀取所有的消息。
AWS CloudWatch可以幫助監(jiān)控一個消息隊列的載入以及用戶應(yīng)用程序的流量。AWS彈性負(fù)載平衡器或自動擴(kuò)展功能可以幫助確保有足夠的計算資源跟上消息流。
如果用戶在實際使用中超過了消息接收的上限,那么用戶將會收到一個被稱為ProvisionedThroughtputExceed的錯誤;然后該消息將被拒絕。如果在讀操作過程中超出了這個閾值,那么用戶同樣也會收到一個ProvisionedThroughtputExceed的錯誤。如果需要增加容量,那么用戶需要在他們的流中增加更多的分塊。
為了向一個流增加分塊,用戶可分拆現(xiàn)有的分塊。每一次分拆操作只需要幾秒鐘的時間,但是,每次只能拆分一個分塊。如果有數(shù)以百計的分塊,那么這就會成為一個問題,因為增加流的相對容量將顯著增加所需的時間。
開發(fā)與集成
Kinesis提供了一個REST API,這樣用戶就可以使用幾乎任何的編程語言來完成對消息隊列的讀寫操作。AWS軟件開發(fā)工具還為Kinesis功能函數(shù)提供了特定語言的綁定。
AWS提供了多個接口以簡化與其他服務(wù)的集成,具體包括DynamoDB、Redshift、簡單存儲服務(wù)以及ElasticSearch。Kinesis是以分塊時間(每小時0.015美元)和PUT運(yùn)行次數(shù)(0.028美元/百萬PUT)進(jìn)行計費(fèi)的。