GeoEvent Server橫向伸縮擴充套件(四)——配置GeoEvent Server啟用分散式事件排程中心...

weixin_33866037發表於2017-11-28

前言

       本文主要做了一件事,通過kafka橫向擴充套件GeoEvent Server,構建GeoEvent+kafka叢集部署。這件事有兩個作用,其一,利用多臺GeoEvent提高資料的吞吐量。其二,利用kafka叢集的機制來提高GeoEvent Server軟體的魯棒性。

       GeoEvent Server是用來實時接入的GIS資料的GIS實時伺服器。而對於實時伺服器來說,最重要的是系統的魯棒性(Robustness)。什麼是魯棒性?魯棒是Robust的音譯,也就是健壯和強壯的意思。它是在異常和危險情況下系統生存的關鍵。比如說,計算機軟體在輸入錯誤、磁碟故障、網路過載或有意攻擊情況下,能否不當機、不崩潰,就是該軟體的魯棒性。所謂“魯棒性”,是指控制系統在一定(結構,大小)的引數攝動下,維持其它某些效能的特性。

      自從Esri不推薦使用GeoEvent Server叢集,而推薦採用GeoEvent Server單機部署後,GeoEvent Server的魯棒性就成了使用者關注的焦點。而現在,GeoEvent團隊提供了一個方案,用來提高GeoEvent的魯棒性以及橫向擴充套件GeoEvent的能力。地址:http://www.arcgis.com/home/item.html?id=89048b1cfdda4a71a9b2b334fe8c8cc9。為了完成本教程,請您提前下載此連結中教程的附件。

      此教程旨在釋出5篇文章,來分別敘述以下五個章節。本文為第四節。配置GeoEvent Server啟用分散式事件排程中心。

目錄

1 GeoEvent彈性擴充套件架構

這一部分的目的是建立企業和ArcGIS的多個節點上,將在整個教程的其餘部分使用ArcGIS GeoEvent Server。

2 熟悉事件中心概念(Apache Kafka)

本節中的練習將幫助您安裝和探索事件排程中心的特性,包括使用多個broker進行冗餘和伸縮。

3 安裝和配置一個分散式事件排程中心(Apache Kafka)

本節基於前一節,將指導您在三個節點上安裝和配置分散式事件排程中心。在本教程中,您將在3臺已配置的GeoEvent Server節點上安裝事件排程中心。

4 配置GeoEvent Server啟用分散式事件排程中心

本節的目的是在一個分散式的事件排程中心完成GeoEvent Server配置。具體來說,你將學習如何使用Kafka 聯結器配置GeoEvent Server接收消費從Apache Kafka生產的資訊。 自定義聯結器可在ArcGIS GeoEvent Gallery找到。

5 探討了GeoEvent Server利用分散式事件排程中心(Apache Kafka)實現魯棒性

最後,在本節中,您將測試你的GeoEvent Server和kafka部署的魯棒性,通過試驗丟失brokers和丟失consumers,確保預期的訊息仍然被接收並儲存在系統中。

正文

3 安裝和配置一個分散式事件排程中心(Apache Kafka)

在本章節,你將配置每個GeoEvent Server節點從Kafka話題中消費事件。消費Kafka的訊息需要給GeoEvent Server配置Kafka聯結器。這是一個自定義聯結器,可以在ArcGIS GeoEvent Gallery獲取。可以參考http://www.jianshu.com/p/f3c75dc5b3fc這篇文章來給GeoEvent配置Kafka輸入。

1.下載GeoEvent Server 的Kafka聯結器:

https://www.arcgis.com/home/item.html?id=7f94ec2a3eb944c79e98fe854d60d671

2.在GeoEvent Server的機器上,解壓zip檔案到一個新資料夾(不要放在GeoEvent Server安裝目錄)。

3.按照GeoEvent Server – Kafka Connectors.pdf教程指導,或者按照http://www.jianshu.com/p/f3c75dc5b3fc這篇文章的指導,在你的GeoEvent Server機器上配置Kafka聯結器。

   a.由於你在前面的練習中已經安裝了Kafka,可以跳過安裝kafka等先決條件部分。

   b.忽略掉pdf教程的這兩個部分,因為接下來會做不同的練習:

     i. Configure the Receive Text from Apache Kafka Input Connector to receive messages from Kafka.

     ii. Configure the Publish Text to an Apache Kafka Output Connector to send messages to Kafka.

配置一個Kafka輸入聯結器從分散式事件排程中心接收事件

1.使用上一節“熟悉事件中心概念”中的知識來建立一個具有3個分片數,且複製因子為3,叫作taxis的話題。

5650937-b89eca7d6eef72b0.png
檢視話題詳情

2.通過以下步驟,匯入計程車資料的GeoEvent定義。

   a.開啟GeoEvent Manager訪問站點→配置儲存。

5650937-ee6b150f95c4de7e.png
配置儲存

   b.匯入包含Kfka聯結器的配置檔案GeoEventConfig_taxis.xml,檔案在\configuration目錄中。

   c.訪問站點→GeoEvent定義,確認taxis-def這個GeoEvent定義已經出現在列表裡。

5650937-fec16d64bb35269c.png
taxis-def定義出現

3.建立輸入接收消費來自Kafka的事件。

   a.訪問服務→輸入,點選新增輸入。

   b.搜尋kafka並選擇Receive Text from Apache Kafka輸入聯結器。

5650937-f7f09b162894ce95.png
輸入聯結器

4.按照如下配置,配置輸入Receive Text from Apache Kafka聯結器。

5650937-53da8731b4812298.png
Kafka輸入聯結器配置

為了確保可靠性,使用指定全部ZooKeeper節點連線ZooKeeper是非常重要的。這樣,即使一個ZooKeeper節點離線,任何客戶端連線到Kafka依然能夠有新的ZooKeeper負責。

使用以下連線字串指定你的ZooKeeper叢集中的三個節點,指定你在zookeeper-replicated.properties檔案中指定的客戶端埠:

  machine3.domain.com:2183,machine4.domain.com:2183,machine5.domain.com:2183

記住,你的GeoEvent節點計算機名machine3.domain.com以及其他的計算機名,應為全域名格式的名稱(FQDN)。確保整個字串中沒有空格。

5.展開輸入聯結器屬性的高階設定並如下配置。

5650937-8c288e84d013a8b5.png
輸入屬性高階設定

注意:Append to the End of Payload屬性必須與事件分隔符屬性相同。

6.點選儲存,儲存這個新的kafka-text-in 聯結器。

配置GeoEvent Server將要素寫入時空大資料儲存

1.使用taxis-def GeoEvent定義在時空大資料儲存中建立資料來源

   a.訪問站點→時空大資料儲存,點選建立資料來源,為taxi資料定義一個新的資料來源。

   b.配置新資料來源屬性,保持預設值即可。

5650937-a436b615c60c6e3a.png
時空大資料資料來源建立

     注意:預設的碎片數是3,比本例伸縮部署方案中的時空大資料儲存的節點數多。擁有比時空大資料儲存節點數量更多的碎片是最優方法,以便在資料變大後,您可以新增額外的節點。

   c.在聚合渲染部分下,將特徵閾值設定為1000,LOD偏移量設為0。

5650937-e156d2601f72e1e3.png
時空大資料資料來源建立聚合渲染部分

   d.可以對要素渲染或聚合渲染做一些其他符號化調整併發布資料來源。

   e.完成釋出後,此資料來源會在時空大資料儲存列表中出現。

5650937-15c86cc1bf7fb1ab.png
資料來源釋出完成

2.建立一個將事件寫入到資料來源的輸出。

   a.訪問服務→輸出,選擇新增輸出。

   b.選擇Add a Feature to an ArcGIS Spatiotemporal Big Data Store輸出聯結器

3.配置輸出聯結器如下圖所示,並儲存輸出。

5650937-d4720c315af42301.png
輸出聯結器

4.建立一個額外的輸出,通過TCP socket將事件傳送為文字。

   a.點選新增輸出,選擇Push Text to an External TCP Socket輸出聯結器。

   b.配置輸出如下圖所示,並且儲存此輸出。

5650937-98245e7128a09507.png
TCP輸出文字

5.開啟GeoEvent Logger點選重新整理獲取TCP輸出列表,核實存在tcp-text-out的輸出。

5650937-4b476cbf5468a023.png
GeoEvent Logger

6.在GeoEvent Manager中,建立一個新GeoEvent 服務來接收通過Kafka傳送過來的事件。

   a.訪問服務→GeoEvent 服務→然後點選新增服務。

   b.命名新GeoEvent 服務 kafka-to-output 然後點選建立。

   c.在服務設計時,展開左邊的皮膚,將kafka-text-in輸入、bds-out輸出和tcp-text-out輸出等拖拽至主皮膚上。

5650937-7fe5601a042cf6db.png
kafka的示例服務

   d.將kafka-text-in輸入連線到bds-out和tcp-text-out輸出。

     kafka輸入和時空大資料輸出都是基於GeoEvent定義taxis-def,所以沒有欄位對映是必要的。

5650937-13dad5c1ad9175f2.png
建立Kafka服務

   e.點選發布,儲存併發布kafka-to-output GeoEvent服務。

7.匯出GeoEvent Server機器的配置。

   a.訪問站點→配置儲存 點選匯出配置。

   b.當出現提示後,選擇匯出配置,點選匯出,儲存成一個XML檔案。

5650937-5dbc52919406d293.png
匯出配置

8.在其他的GeoEvent Server節點匯入GeoEvent Server配置

   a.拷貝你剛剛匯出的GeoEvent Server配置檔案(XML)到另外的兩臺GeoEvent Server機器上。

   b.站點→配置儲存→匯入配置。

   注意:如果已存在Kafka輸入/輸出聯結器,請忽略任何關於Kafka聯結器的警告資訊。

9.在另外兩臺GeoEvent Server節點上開啟GeoEvent Logger接收TCP輸出。

10.當以上所有完成後,所有三個GeoEvent Server應該有一個完全相同的配置。

5650937-a86ae31da7834c1e.png
GeoEvent監視器

將CSV中的事件模擬傳送到分散式事件中心的話題上

在前一節中,你使用了kafka提供的預設的producer程式傳送訊息到一個話題上。在本節中,你將使用教程提供的自定義實用程式來模擬來自CSV檔案中訊息。

1.如果你還沒有把教程內容拷貝到GeoEvent Server機器上,請先拷貝到任意路徑,例如C:\ResiliencyTutorial.

2.開啟命令視窗,訪問到C:\ResiliencyTutorial\utilities資料夾。

5650937-bc9a3571083b81cb.png
訪問教程工具

實用工具包含一個簡單的命令列應用程式,叫做event-simulator-for-kafka(kafka事件模擬器)。該程式從指定的CSV檔案讀取,並將每條行作為訊息提交到kafka話題。應用程式還配置群組訊息用相同的時間戳並同一時間把他們提交到話題上。

3.執行如下命令列使用event-simulator-for-kafka程式來模擬計程車位置更新在kafka話題上。

java -jar event-simulator-for-kafka.jar machine3.domain.com:9092,machine4.domain.com:9092,machine5.domain.com:9092 taxis 5000 ..\data\taxi-simulation-small.csv 1 true

注意:使用完全限定主機名(完全限定域名)代替你的GeoEvent Server節點,就像你在server.properties 檔案中定義Kafka埠一樣。

為了確保彈性,當寫入內容到一個話題時,程式會列出至少三個你的Kafka broker 這樣他們中任意一臺broker掉線,另外的broker依然是可獲取的。

上面命令中的5000是程式傳送訊息間隔的毫秒數,並標記一個時間戳。在這個檔案中,有3個時間戳,所以程式會傳送三批訊息,每批訊息之間間隔5秒。

5650937-adf7f1919e250f03.png
傳送訊息

4.每一個GeoEvent Server節點消費掉taxis話題下的訊息,因為每個節點都配置在了相同的名叫geoevent的組裡,它們將根據生產者效用的分割方法接收不同的訊息。

例如:

5650937-d398ada1c69c1089.png
GElogger接收1
5650937-d9ccb2b03ed8e355.png
GElogger接收2

5.在web map中瀏覽結果資料。

   a.GeoEvent服務也會推送接收的訊息到時空大資料儲存中,在瀏覽器中,開啟Portal home並搜尋taxidata。搜尋到兩個結果,要素服務和地圖服務。

5650937-82704ae19e079237.png
要素服務和地圖服務

   b.點選地圖服務,點選open下拉框,選擇新增圖層到一個新的地圖。

   c.縮放至紐約。你的地圖上應該有了18個要素——由六臺不同的計程車更新了三次的位置。

5650937-d6360dfcec26fb60.png
地圖服務的要素檢視

由於你設定資料來源時,要素閾值是1000。所以這幅地圖在要素數量到達1000之前會以要素檢視顯示。而要素多於1000,則會以聚合地圖檢視顯示。

6.清空。

    a.開啟GeoEvent Manager 並訪問站點→時空大資料儲存。

    b.點選資料來源這一列,taxidata的叉號。這將清空已有的18條記錄。

5650937-4814f219c0cd7503.png
清空資料

    c.訪問服務→監控 停止tcp-text-out輸出,關閉每臺機器的GeoEventLogger。

    d.在監控頁面,點選重置統計,重置所有的計數。

7.通過分散式事件中心探索GeoEvent Server的可伸縮性。

    a.為了模擬高速資料接入,回到第三部使用的event-simulator-for-kafka程式命令列.

    b.執行如下命令,指向了本教程中的兩一個示例資料集。

        java -jar event-simulator-for-kafka.jar         machine3.domain.com:9092,machine4.domain.com:9092,machine5.domain.com:9092 taxis 1000 ..\data\taxi-simulation.csv 1 true

    此程式推送大量計程車採集的資料到kafka,間隔為1秒。

    c.訪問監控頁面,觀察事件計數。你會發現每秒上百到一千的事件接入到每個GeoEvent Server節點中。

5650937-ddb48944f0fd1f5f.png
監控頁面

GeoEvent Server節點共用一個資料儲存,所以每個GeoEvent Server節點可以保持它的最大速度3000-4000條/秒,並且將它們寫入到時空大資料儲存中,總速度相當於9000-12000條每秒。

8.可選:在Portal的Web map地圖檢視器中檢視資料。

    a.回到你的web map並且縮放定位到紐約市地區。

    b.地圖現在將以資料動態渲染的形式展示,因為在當前比例尺,已經超過了1000個要素。

5650937-67b78314d3238c0a.png
檢視聚合檢視

9.清空。

    a.如果模擬器沒有結束,回到命令視窗,在event-simulator-for-kafka程式正在執行,按ctrl+c結束程式。

    b.回到GeoEvent Manager訪問站點→時空大資料儲存,並在data source 那一列taxidata右側點選叉號。這將清空資料集的資料為了下一次練習。

5650937-ba10d800dc8e660b.png
清空資料

    c.在GeoEvent Manager監視器處點選重置統計。結束。

相關文章