我有一个在AWS EC2实例上运行的分布式系统。我的集群有大约2000个节点。我想介绍一种流处理模型,该模型可以处理每个节点定期发布的元数据(CPU使用率,内存使用率,IO等)。我的系统只关心最新数据。当处理模型关闭时,丢失几个数据点也是可以的。因此,我选择了hazelcast-jet,它是一种具有出色性能的内存处理模型。这里我对模型有几个疑问:
如果有一个可供我学习的综合示例,这将非常有用。
答案 0 :(得分:2)
将hazelcast-jet部署到多个ec2实例的最佳方法是什么?
在每台计算机上下载并解压缩Hazelcast Jet发行版:
$ wget https://download.hazelcast.com/jet/hazelcast-jet-3.1.zip
$ unzip hazelcast-jet-3.1.zip
$ cd hazelcast-jet-3.1
转到解压缩发行版的lib
目录并下载hazelcast-aws
模块:
$ cd lib
$ wget https://repo1.maven.org/maven2/com/hazelcast/hazelcast-aws/2.4/hazelcast-aws-2.4.jar
编辑bin/common.sh
以将模块添加到类路径。文件结尾处是一行
CLASSPATH="$JET_HOME/lib/hazelcast-jet-3.1.jar:$CLASSPATH"
您可以复制此行并将-jet-3.1
替换为-aws-2.4
。
编辑config/hazelcast.xml
以启用AWS集群发现。详细信息为here。在这一步中,您必须处理IAM角色,EC2安全组,区域等。还有一个best practices guide用于AWS部署。
使用jet-start.sh
启动集群。
如何配置客户端,使其知道在哪里提交任务?
一种直接的方法是指定运行Jet的计算机的公共IP,例如:
ClientConfig clientConfig = new ClientConfig();
clientConfig.getGroupConfig().setName("jet");
clientConfig.addAddress("54.224.63.209", "34.239.139.244");
但是,根据您的AWS设置,它们可能不稳定,因此您也可以配置以发现它们。 here对此进行了说明。
如何从数千个来源中提取数据?源将推送数据而不是将其拉出。
我认为您最好的选择是将数据放入Hazelcast地图中,并使用mapJournal
源从中获取更新事件。