當(dāng)談到物聯(lián)網(wǎng)(IoT),許多開發(fā)者從微控制器、片上系統(tǒng)板、單板計(jì)算機(jī)、傳感器和各種其他電子元件來思考。而設(shè)備無疑是物聯(lián)網(wǎng)的基礎(chǔ),連接的解決方案的核心價(jià)值在于這些設(shè)備產(chǎn)生的數(shù)據(jù)。
設(shè)備層僅僅是底層數(shù)據(jù)平臺(tái)的冰山一角,而底層數(shù)據(jù)平臺(tái)則是水面下的重?fù)?dān)。強(qiáng)大的物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)的關(guān)鍵支柱之一是Apache Kafka,它是一種開源軟件,旨在處理大量的數(shù)據(jù)攝取。它充當(dāng)數(shù)據(jù)中心中由Apache storm、Apache spark和Apache hadoop集群提供支持的數(shù)據(jù)處理管道的網(wǎng)關(guān)。
如果你是一個(gè)將物聯(lián)網(wǎng)作為職業(yè)選擇的開發(fā)者,那么現(xiàn)在是你開始投資Apache kafka的時(shí)候了。本文探討了Apache kafka在部署可伸縮物聯(lián)網(wǎng)解決方案中所扮演的角色。
Kafka:傳感器數(shù)據(jù)的高性能攝取層
物聯(lián)網(wǎng)設(shè)備包括能夠生成多個(gè)數(shù)據(jù)點(diǎn)的各種傳感器,這些數(shù)據(jù)點(diǎn)以高頻率采集。一個(gè)簡(jiǎn)單的恒溫器每分鐘可以產(chǎn)生幾字節(jié)的數(shù)據(jù),而一輛連接的汽車或風(fēng)力渦輪機(jī)在幾秒鐘內(nèi)就可以產(chǎn)生千兆字節(jié)的數(shù)據(jù)。這些海量數(shù)據(jù)集被攝取到數(shù)據(jù)處理管道中,用于存儲(chǔ)、轉(zhuǎn)換、處理、查詢和分析。
每個(gè)數(shù)據(jù)集由多個(gè)表示特定度量的數(shù)據(jù)點(diǎn)組成。例如,連接的暖風(fēng)、通風(fēng)和空調(diào)(HVAC)系統(tǒng)將報(bào)告環(huán)境溫度、所需溫度、濕度、空氣質(zhì)量、鼓風(fēng)機(jī)轉(zhuǎn)速、負(fù)荷和能耗指標(biāo)。
在一個(gè)大型購(gòu)物中心,這些數(shù)據(jù)點(diǎn)經(jīng)常從數(shù)百個(gè)hvac收集。由于這些設(shè)備的功能可能不夠強(qiáng)大,無法運(yùn)行完整的TCP網(wǎng)絡(luò)堆棧,因此它們使用諸如Z-Wave和Zigbee之類的協(xié)議將數(shù)據(jù)發(fā)送到能夠聚合數(shù)據(jù)點(diǎn)并將其攝取到系統(tǒng)中的中央網(wǎng)關(guān)。
網(wǎng)關(guān)將數(shù)據(jù)集推送到Apache-Kafka集群,其中的數(shù)據(jù)采用多條路徑。需要實(shí)時(shí)監(jiān)控的數(shù)據(jù)點(diǎn)經(jīng)過熱路徑。在我們的HVAC場(chǎng)景中,實(shí)時(shí)跟蹤溫度、濕度和空氣質(zhì)量等指標(biāo)以采取糾正措施非常重要。這些數(shù)據(jù)點(diǎn)可以通過Apache storm和Apache spark集群進(jìn)行近實(shí)時(shí)處理。
負(fù)載和功耗等指標(biāo)在一段時(shí)間內(nèi)收集后進(jìn)行分析。通過批處理過程收集和分析的這些數(shù)據(jù)點(diǎn)通常采用數(shù)據(jù)處理管道的冷通道。MapReduce作業(yè)可以在Hadoop集群中運(yùn)行,用于分析hvac的能效。
不管數(shù)據(jù)點(diǎn)采用什么路徑,它們都需要被攝取到系統(tǒng)中。apachekafka充當(dāng)處理大量數(shù)據(jù)集的高性能數(shù)據(jù)攝取層。負(fù)責(zé)熱路徑和冷路徑分析的數(shù)據(jù)處理管道組件成為apachekafka的訂戶。
Kafka vs.MQTT
apachekafka不是MQTT的替代品,MQTT是一種通常用于機(jī)器到機(jī)器(M2M)通信的消息代理??ǚ蚩ǖ脑O(shè)計(jì)目標(biāo)與MQTT有很大不同。
在物聯(lián)網(wǎng)解決方案中,設(shè)備可分為傳感器和執(zhí)行器。傳感器生成數(shù)據(jù)點(diǎn),而執(zhí)行器是可以通過命令控制的機(jī)械部件。例如,房間中的環(huán)境照明可用于調(diào)整LED燈泡的亮度。在這種情況下,光傳感器需要與LED通信,這是M2M通信的一個(gè)例子。MQTT是為傳感器網(wǎng)絡(luò)和M2M優(yōu)化的協(xié)議。
由于Kafka不使用HTTP進(jìn)行接收,所以它提供了更好的性能和規(guī)模。
由于MQTT是為低功耗設(shè)備設(shè)計(jì)的,它無法處理海量數(shù)據(jù)集的攝取。另一方面,Apache kafka可以處理高速數(shù)據(jù)攝取,但不能處理M2M。
可擴(kuò)展的物聯(lián)網(wǎng)解決方案使用MQTT作為顯式設(shè)備通信,同時(shí)依賴Apache Kafka來接收傳感器數(shù)據(jù)。也可以將Kafka和MQTT橋接起來,以便攝取和M2M。但是建議將設(shè)備或網(wǎng)關(guān)配置為Kafka生產(chǎn)者,同時(shí)仍然參與由MQTT代理管理的M2M網(wǎng)絡(luò),從而使它們保持分離。
Kafka與HTTP/REST
apachekafka公開了一個(gè)基于二進(jìn)制協(xié)議的TCP端口。推送數(shù)據(jù)的客戶機(jī)啟動(dòng)套接字連接,然后寫入一系列請(qǐng)求消息并讀回相應(yīng)的響應(yīng)消息。此協(xié)議不需要為每個(gè)連接或斷開連接進(jìn)行握手。
由于Kafka不使用HTTP進(jìn)行接收,所以它提供了更好的性能和規(guī)模??蛻魴C(jī)可以連接到集群的一個(gè)實(shí)例來接收數(shù)據(jù)。這種體系結(jié)構(gòu)與原始TCP套接字相結(jié)合提供了最大的可伸縮性和吞吐量。
雖然使用HTTP代理與Kafka集群通信可能很誘人,但建議解決方案使用本機(jī)客戶機(jī)。由于Kafka是用Java編寫的,所以本機(jī)Java客戶機(jī)庫(kù)提供了最好的性能。社區(qū)已經(jīng)為Go、Python甚至甚至構(gòu)建了優(yōu)化的客戶端庫(kù)節(jié)點(diǎn).js. Shopify還為Kafka開發(fā)了一個(gè)名為Sarama的開源Go庫(kù)。Rackspace的Mailgun團(tuán)隊(duì)已經(jīng)構(gòu)建了Kafka Pixy,一個(gè)Kafka的開源HTTP代理。Python、C#、Ruby和其他語言有多個(gè)庫(kù)。
大多數(shù)物聯(lián)網(wǎng)網(wǎng)關(guān)功能強(qiáng)大,足以運(yùn)行Java、Go或Python。為了獲得最佳性能和吞吐量,建議使用本機(jī)為Kafka設(shè)計(jì)的客戶端庫(kù)。
Kafka入門
apache kafka是用Java開發(fā)的,它的部署由apache zookeeper管理。任何能夠運(yùn)行JVM的操作系統(tǒng)都可以用來部署Kafka集群。為了測(cè)試水,你可以在Docker運(yùn)行卡夫卡。
如果您不想處理基礎(chǔ)設(shè)施,可以從云中的托管Kafka服務(wù)開始。IBM Bluemix有一個(gè)基于Kafka的完全管理的基于云的消息服務(wù)MessageHub。Cloud Karafka是公共云中的另一個(gè)流式平臺(tái),專為Apache Kafka工作負(fù)載而設(shè)計(jì)。 Aiven.io提供hosted Kafka以及InfloxDB、Grafana和Elasticsearch。如果你是一個(gè)Salesforce.com網(wǎng)站或者Heroku開發(fā)者,你可以在Heroku上利用Kafka。
Apache卡夫卡是許多大數(shù)據(jù)部署的基礎(chǔ)。在本系列的后續(xù)文章中,我將介紹Kafka的關(guān)鍵概念、體系結(jié)構(gòu)和術(shù)語。
? ? ? ?責(zé)任編輯:pj
電子發(fā)燒友App












評(píng)論