我想从多个url接收数据。你可以认为,每个url代表一个设备。我可以为每个设备创建从getHttp开始的流。但这种情况对我来说太糟糕了。另一种选择是,我可以创建以generateFlowFile(在这个处理器中定义的每个url(开始的流,然后拆分,并将这些url发送到invokeHttp处理器。但每个url都将按顺序工作。所以,当我向一个url发送请求时,我可能会丢失其他人的数据。
在这种情况下我能做什么?
编辑:对于我的用例,首先,我必须从多个url接收数据。然后我将在应用一些转换后将这些数据发送给Kafka。但我必须从近50个或更多的URL中获取数据。我需要在nifi集群中以可扩展的方式实时完成这项工作。
使用问题中提到的相同流程:
问题中描述的流程:
1.GenerateFlowFile
2.Split Text
3.Extract Text
然后将ExtractText处理器的成功关系馈送到RemoteProcessorGroup
(以在集群中分配负载(。
然后获取分发的流程文件,将其提供给InvokeHTTP
处理器,并在调度选项卡中调度处理器运行多个并发任务。
然后使用PublishKafkaRecord
处理器并定义记录读写器模式,更改计划以运行多个并发任务。
最终流程:
1.GenerateFlowFile
2.SplitText
3.ExtractText
4.RemoteProcessorGroup (or) ConnectionLoadBalance(Starting NiFi-1.8.0)
5.InvokeHTTP //more than one concurrent task
6.RemoteProcessorGroup (or) ConnectionLoadBalance(Starting NiFi-1.8.0) //optinal
7.PublishKafkaRecord //more than one concurrent task
试试上面的流程,我相信Kafka处理器是非常可扩展的,可以给你带来预期的良好性能:(
此外
从NiFi-1.8版本开始,我们的don't
需要使用RemoteProcessGroup
(分配负载(,因为我们可以配置Connections(关系(来分配负载平衡。
有关NiFi-1.8版本中这些new additions
的更多详细信息,请参阅此链接和NiFi-5516链接。