2

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

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

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

4

1 回答 1

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 集群发现。详情在这里。在此步骤中,您必须处理 IAM 角色、EC2 安全组、区域等。还有 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源从中获取更新事件。

于 2019-09-25T15:59:02.417 回答