【问题标题】:NiFi Cluster on AWS using ECS and external Zookeeper在 AWS 上使用 ECS 和外部 Zookeeper 的 NiFi 集群
【发布时间】: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


【解决方案1】:
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

所以我在我的 ECS“任务定义”中使用“默认”作为“网络模式”。默认网络模式是“网桥”。因此,动物园管理员将 docker 容器名称注册为未正确解析的主机名,因此出现“java.net.UnknownHostException”异常。基本上它正在寻找一个名称是容器名称的主机,最终是 UnknownhostException。

修复方法是使用网络模式作为“主机”,它将 EC2 实例的实际主机名作为主机名,而不是容器名。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 2021-03-29
    • 2018-12-23
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多