由 Kafka 引起的 NiFi 工作流瓶颈

Tom*_*son 1 concurrency performance apache-kafka apache-nifi hortonworks-dataflow

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

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

我们的 Publish 和 Consume Kafka 处理器在所有三个节点上运行,我们的 Kafka 主题有 3 个分区,跨越三个代理。

有没有人知道什么会导致这种不一致以及我可以做些什么来减轻它并加快工作流程?

Bry*_*nde 5

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

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

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

在消费方面,如果您还设置了消息分隔符,那么它将向一个流文件写入许多消息,最多可达 Max Poll Records。

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