如何为Nifi处理负载均衡器处理http请求处理器

时间:2018-08-03 07:09:01

标签: apache-nifi

我正在运行3节点Nifi群集(1.5版本)。 我已经建立了带有handlehttprequest和处理器中间集的管道,用于转换/清除handlehttpresponse之后的传入数据。 我已经为客户端应用程序提供了http端点。 有各种客户端应用程序将通过nifi提供的其余端点发布数据。 我遇到了以执行模式作为所有节点运行的Handlehttprequest的问题。一段时间后,Nifi UI变得无响应,我可以在nifi-app.log中看到以下错误消息,并且可以在处理器中看到错误消息(handlehttprequest)。

将执行更改为主要节点即可解决问题。

因此需要以下帮助: Handlehttprequest无法在多节点群集环境上工作? 如果是这样,如何利用多个节点来处理客户端应用程序发布的传入数据的高吞吐量? 如何为handlehttprequest端点放置负载均衡器并将传入的数据分发到群集上的多个节点?

处理器级别的错误消息:

HandleHttpRequest[id=74ee1128-2de6-3979-a818-2b598186f7aa]       HandleHttpRequest[id=74ee1128-2de6-3979-a818-2b598186f7aa] failed to process due to org.apache.nifi.processor.exception.ProcessException: Failed to initialize the server; rolling back session: Failed to initialize the server

=========================

Nifi-app.log

2018-08-03 14:45:22,551 INFO [Timer-Driven Process Thread-6] org.eclipse.jetty.server.Server jetty-9.4.3.v20170317
2018-08-03 14:45:22,551 ERROR [Timer-Driven Process Thread-3] o.a.n.p.standard.HandleHttpRequest HandleHttpRequest[id=74ee1128-2de6-3979-a818-2b598186f7aa] Failed to process session due to org.apache.nifi.processor.exception.ProcessException: Failed to initialize the server: {}
org.apache.nifi.processor.exception.ProcessException: Failed to initialize the server
        at org.apache.nifi.processors.standard.HandleHttpRequest.onTrigger(HandleHttpRequest.java:488)
        at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
        at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1122)
        at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:147)
        at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47)
        at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:128)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.BindException: Cannot assign requested address
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)

============================================= < / p>

感谢您提供任何指导。

谢谢, Vish

1 个答案:

答案 0 :(得分:1)

此错误通常表示服务器绑定到主机或端口时出现问题。由于听起来好像端口可用,所以主机名可能有问题。

在集群中,必须在HandleHttpRequest中将hostname属性保留为空白,以便它将绑定到每个节点的地址,或者可以使用$ {hostname}之类的动态表达式。

对于负载平衡,将负载平衡器放在Web应用程序的前面应该与任何其他配置相同。已经有一些文章介绍了它:

https://pierrevillard.com/2017/02/10/haproxy-load-balancing-in-front-of-apache-nifi/