hazelcast-jet 部署和数据摄取

hazelcast-jet deployment and data ingestion

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

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

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

What is the best way to deploy hazelcast-jet to multiple ec2 instances?

  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 集群发现。 AWS 部署的详细信息 here. In this step you'll have to deal with IAM roles, EC2 security groups, regions, etc. There's also a best practices guide

  5. jet-start.sh启动集群。

How to config client so that it knows where to submit the tasks?

一种直接的方法是指定 Jet 为 运行 的机器的 public IP,例如:

ClientConfig clientConfig = new ClientConfig();
clientConfig.getGroupConfig().setName("jet");
clientConfig.addAddress("54.224.63.209", "34.239.139.244");

但是,根据您的 AWS 设置,这些可能不稳定,因此您也可以配置以发现它们。这是解释 here.

How to ingest data from thousands of sources? The sources push data instead of being pulled.

我认为最好的选择是将数据放入 Hazelcast 地图,并使用 mapJournal 源从中获取更新事件。