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