【发布时间】:2019-07-15 13:28:25
【问题描述】:
我正在尝试使用 ECS 和外部 Zookeeper 在 AWS 上设置 NiFi 集群。
已经为 Zookeeper 创建了一个 ECS 集群,其中包含 3 个 EC2 实例并运行 zookeeper ensemble。在我使用 SolrCloud 和本地 NiFi 进行测试时,这个外部 Zookeeper 运行良好。基于https://www.nifi.rocks/apache-nifi-docker-compose-cluster建立本地NiFi集群
现在我已经确保 NiFi 集群与我在 AWS 上运行的外部 zookeeper 配合良好,我创建了另一个 ECS 集群,其中包含 2 个用于 NiFi 的 EC2 实例。我确实确保为 NiFi 集群正确设置了所有变量。 https://github.com/apache/nifi/tree/master/nifi-docker/dockerhub中给出的环境变量列表中的所有检查
虽然 NiFi 在 2 个 EC2 实例上启动并且它们使用我的外部 Zookeeper,但 2 个 NiFi 作为两个单独的集群运行,每个集群有一个节点。理想情况下,我希望它们在一个集群中作为 2 个节点运行。
我确实比较了本地 NiFi 集群和 AWS 集群的 nifi.properties,它们看起来都不错。
我在这里遗漏了一些明显的步骤吗?
例外是
WARN [main] o.a.nifi.controller.StandardFlowService Failed to connect to cluster due to: org.apache.nifi.cluster.protocol.ProtocolException: Failed to create socket to due to: java.net.UnknownHostException
Attempted to determine the node's information but failed to retrieve its information due to org.apache.nifi.cluster.protocol.ProtocolException: Failed to create socket due to: java.net.UnknownHostException
【问题讨论】:
-
在 nifi.properties 文件中设置 Zookeeper 属性时需要小心。在整个集群的 Nifi 实例中,zookeeper 的根节点应该被提及。当节点连接到 zookeeper 时,curator 会选举一个节点作为集群协调器。您可以连接到 zkCli 并检查节点的连接方式。
-
我确保将 zookeeper 根注释更改为 nifi.zookeeper.root.node=/root,这是 zookeeper 中的默认节点。此外, docker-compose up --scale nifi=3 -d 在我的本地创建一个 3 节点集群,并很好地连接到这个外部 zookeeper。
标签: amazon-web-services docker apache-zookeeper apache-nifi amazon-ecs