由Kafka引起的NiFi工作流程中的瓶颈

问题描述:

我在Apache NiFi中使用Kafka作为缓冲系统创建数据摄取工作流程。我有一个3节点集群运行相同的工作流程,每个节点有4个核心。由Kafka引起的NiFi工作流程中的瓶颈

我依赖于将数据移入和移出不同卡夫卡主题的几个实例,这是工作流程中速度最慢的部分,并且性能方面非常不一致,因为两个相同的测试可能会有高达100%工期增加。

我们的发布和使用Kafka处理器正在所有三个节点上运行,而我们的Kafka主题在三个经纪人中有3个分区。

有没有人有任何想法会导致这种不一致,以及我能做些什么来缓解它并加快工作流程?

+1

我们需要更多的细节... NiFi的版本是什么?什么版本的卡夫卡经纪人?什么版本的Kafka处理器(0.9 vs 0.10)?你在PublishKafka前看到了流文件的构建,或者什么是慢?您是否一次发布并使用一条消息? –

+0

NiFi版本1.1.0,Kafka版本0.10.1.2.1,0.10 kafka处理器,在发布kafka之前在队列中建立文件,消耗kafka没有按照需要快速返回文件,我相信它正在发布和使用1个文件一段时间,不包括具体的批量逻辑。 – TomRobson

单一最大的性能改进将是设计流程,以便每个流文件包含的消息数量较少且包含许多消息的流文件,而不是每个消息都有多个消息。

很难说如何为您的用例做到这一点,因为我不知道您的流量,如数据格式或您对每封邮件做什么,但让我们假装您有CSV数据...目标是让一个流文件包含多行CSV,而不是CSV的每行一个流文件。

在发布方面,当您将此流文件发送到PublishKafka_0_10时,您将设置Message Demarcator属性为换行符(使用shift + enter),它会将CSV的每一行都传送到Kafka。

在使用时,如果您还设置了消息分界符,那么它会将许多消息写入一个流文件,最多可以记录最多的最大轮询记录。

此外,您可以尝试调整每个处理器的并发任务(在调度选项卡上找到),以便并行执行更多发布或消费。由于您有3个分区和3个NiFi节点,所以增加消费端的并发任务可能没有太大好处,因此每个分区已经有一个线程,但是如果您有6个分区和3个NiFi节点,那么您可能会受益于有2个并发任务。

+0

谢谢布莱恩,批量的想法工作! :) – TomRobson