GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心

前言

       本文主要做了一件事,通过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的话题。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第1张图片
查看话题详情

2.通过以下步骤,导入出租车数据的GeoEvent定义。

   a.打开GeoEvent Manager访问站点→配置存储。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第2张图片
配置存储

   b.导入包含Kfka连接器的配置文件GeoEventConfig_taxis.xml,文件在\configuration目录中。

   c.访问站点→GeoEvent定义,确认taxis-def这个GeoEvent定义已经出现在列表里。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第3张图片
taxis-def定义出现

3.创建输入接收消费来自Kafka的事件。

   a.访问服务→输入,点击添加输入。

   b.搜索kafka并选择Receive Text from Apache Kafka输入连接器。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第4张图片
输入连接器

4.按照如下配置,配置输入Receive Text from Apache Kafka连接器。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第5张图片
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.展开输入连接器属性的高级设置并如下配置。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第6张图片
输入属性高级设置

注意:Append to the End of Payload属性必须与事件分隔符属性相同。

6.点击保存,保存这个新的kafka-text-in 连接器。

配置GeoEvent Server将要素写入时空大数据存储

1.使用taxis-def GeoEvent定义在时空大数据存储中创建数据源

   a.访问站点→时空大数据存储,点击创建数据源,为taxi数据定义一个新的数据源。

   b.配置新数据源属性,保持默认值即可。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第7张图片
时空大数据数据源创建

     注意:默认的碎片数是3,比本例伸缩部署方案中的时空大数据存储的节点数多。拥有比时空大数据存储节点数量更多的碎片是最优方法,以便在数据变大后,您可以添加额外的节点。

   c.在聚合渲染部分下,将特征阈值设置为1000,LOD偏移量设为0。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第8张图片
时空大数据数据源创建聚合渲染部分

   d.可以对要素渲染或聚合渲染做一些其他符号化调整并发布数据源。

   e.完成发布后,此数据源会在时空大数据存储列表中出现。

数据源发布完成

2.创建一个将事件写入到数据源的输出。

   a.访问服务→输出,选择添加输出。

   b.选择Add a Feature to an ArcGIS Spatiotemporal Big Data Store输出连接器

3.配置输出连接器如下图所示,并保存输出。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第9张图片
输出连接器

4.创建一个额外的输出,通过TCP socket将事件发送为文本。

   a.点击添加输出,选择Push Text to an External TCP Socket输出连接器。

   b.配置输出如下图所示,并且保存此输出。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第10张图片
TCP输出文本

5.打开GeoEvent Logger点击刷新获取TCP输出列表,核实存在tcp-text-out的输出。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第11张图片
GeoEvent Logger

6.在GeoEvent Manager中,创建一个新GeoEvent 服务来接收通过Kafka发送过来的事件。

   a.访问服务→GeoEvent 服务→然后点击添加服务。

   b.命名新GeoEvent 服务 kafka-to-output 然后点击创建。

   c.在服务设计时,展开左边的面板,将kafka-text-in输入、bds-out输出和tcp-text-out输出等拖拽至主面板上。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第12张图片
kafka的示例服务

   d.将kafka-text-in输入连接到bds-out和tcp-text-out输出。

     kafka输入和时空大数据输出都是基于GeoEvent定义taxis-def,所以没有字段映射是必要的。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第13张图片
创建Kafka服务

   e.点击发布,保存并发布kafka-to-output GeoEvent服务。

7.导出GeoEvent Server机器的配置。

   a.访问站点→配置存储 点击导出配置。

   b.当出现提示后,选择导出配置,点击导出,保存成一个XML文件。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第14张图片
导出配置

8.在其他的GeoEvent Server节点导入GeoEvent Server配置

   a.拷贝你刚刚导出的GeoEvent Server配置文件(XML)到另外的两台GeoEvent Server机器上。

   b.站点→配置存储→导入配置。

   注意:如果已存在Kafka输入/输出连接器,请忽略任何关于Kafka连接器的警告信息。

9.在另外两台GeoEvent Server节点上打开GeoEvent Logger接收TCP输出。

10.当以上所有完成后,所有三个GeoEvent Server应该有一个完全相同的配置。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第15张图片
GeoEvent监视器

将CSV中的事件模拟发送到分布式事件中心的话题上

在前一节中,你使用了kafka提供的默认的producer程序发送消息到一个话题上。在本节中,你将使用教程提供的自定义实用程序来模拟来自CSV文件中消息。

1.如果你还没有把教程内容拷贝到GeoEvent Server机器上,请先拷贝到任意路径,例如C:\ResiliencyTutorial.

2.打开命令窗口,访问到C:\ResiliencyTutorial\utilities文件夹。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第16张图片
访问教程工具

实用工具包含一个简单的命令行应用程序,叫做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秒。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第17张图片
发送消息

4.每一个GeoEvent Server节点消费掉taxis话题下的消息,因为每个节点都配置在了相同的名叫geoevent的组里,它们将根据生产者效用的分割方法接收不同的消息。

例如:

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第18张图片
GElogger接收1
GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第19张图片
GElogger接收2

5.在web map中浏览结果数据。

   a.GeoEvent服务也会推送接收的消息到时空大数据存储中,在浏览器中,打开Portal home并搜索taxidata。搜索到两个结果,要素服务和地图服务。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第20张图片
要素服务和地图服务

   b.点击地图服务,点击open下拉框,选择添加图层到一个新的地图。

   c.缩放至纽约。你的地图上应该有了18个要素——由六台不同的出租车更新了三次的位置。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第21张图片
地图服务的要素视图

由于你设置数据源时,要素阈值是1000。所以这幅地图在要素数量到达1000之前会以要素视图显示。而要素多于1000,则会以聚合地图视图显示。

6.清空。

    a.打开GeoEvent Manager 并访问站点→时空大数据存储。

    b.点击数据源这一列,taxidata的叉号。这将清空已有的18条记录。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第22张图片
清空数据

    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节点中。

监控页面

GeoEvent Server节点共用一个数据存储,所以每个GeoEvent Server节点可以保持它的最大速度3000-4000条/秒,并且将它们写入到时空大数据存储中,总速度相当于9000-12000条每秒。

8.可选:在Portal的Web map地图查看器中查看数据。

    a.回到你的web map并且缩放定位到纽约市地区。

    b.地图现在将以数据动态渲染的形式展示,因为在当前比例尺,已经超过了1000个要素。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第23张图片
查看聚合视图

9.清空。

    a.如果模拟器没有结束,回到命令窗口,在event-simulator-for-kafka程序正在运行,按ctrl+c结束进程。

    b.回到GeoEvent Manager访问站点→时空大数据存储,并在data source 那一列taxidata右侧点击叉号。这将清空数据集的数据为了下一次练习。

GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心_第24张图片
清空数据

    c.在GeoEvent Manager监视器处点击重置统计。结束。

你可能感兴趣的:(GeoEvent Server横向伸缩扩展(四)——配置GeoEvent Server启用分布式事件调度中心)