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

时间:2017-08-15 08:50:17

标签: performance concurrency apache-kafka apache-nifi hortonworks-dataflow

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

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

我们的发布和消费Kafka处理器在所有三个节点上运行,我们的Kafka主题在三个代理中有3个分区。

有没有人知道会导致这种不一致的原因以及我可以采取哪些措施来缓解这种情况并加快工作流程?

1 个答案:

答案 0 :(得分:4)

单个最大的性能改进是设计流程,以便每个流文件包含许多消息的流文件更少,而不是每个流文件包含多个流文件。

很难说如何为您的用例执行此操作,因为我对您的流程一无所知,例如数据格式或您对每条消息所做的操作,但我们假装您拥有CSV数据。 ..目标是拥有一个包含多行CSV的流文件,而不是每行CSV的一个流文件。

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

在消费方面,如果您还设置了消息标识符,那么它会将许多消息写入一个流文件,最多可以写入最大轮询记录。

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