hazelcast-jet部署和数据摄取

时间:2019-09-25 07:34:12

标签: amazon-ec2 hazelcast-jet

我有一个在AWS EC2实例上运行的分布式系统。我的集群有大约2000个节点。我想介绍一种流处理模型,该模型可以处理每个节点定期发布的元数据(CPU使用率,内存使用率,IO等)。我的系统只关心最新数据。当处理模型关闭时,丢失几个数据点也是可以的。因此,我选择了hazelcast-jet,它是一种具有出色性能的内存处理模型。这里我对模型有几个疑问:

  1. 将hazelcast-jet部署到多个ec2实例的最佳方法是什么?
  2. 如何从数千个来源中提取数据?源将推送数据而不是将其拉出。
  3. 如何配置客户端,使其知道在哪里提交任务?

如果有一个可供我学习的综合示例,这将非常有用。

1 个答案:

答案 0 :(得分:2)

  

将hazelcast-jet部署到多个ec2实例的最佳方法是什么?

  1. 在每台计算机上下载并解压缩Hazelcast Jet发行版:

    $ wget https://download.hazelcast.com/jet/hazelcast-jet-3.1.zip
    $ unzip hazelcast-jet-3.1.zip
    $ cd hazelcast-jet-3.1
    
  2. 转到解压缩发行版的lib目录并下载hazelcast-aws模块:

    $ cd lib
    $ wget https://repo1.maven.org/maven2/com/hazelcast/hazelcast-aws/2.4/hazelcast-aws-2.4.jar
    
  3. 编辑bin/common.sh以将模块添加到类路径。文件结尾处是一行

    CLASSPATH="$JET_HOME/lib/hazelcast-jet-3.1.jar:$CLASSPATH"
    

    您可以复制此行并将-jet-3.1替换为-aws-2.4

  4. 编辑config/hazelcast.xml以启用AWS集群发现。详细信息为here。在这一步中,您必须处理IAM角色,EC2安全组,区域等。还有一个best practices guide用于AWS部署。

  5. 使用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源从中获取更新事件。