Kafka 导致的 NiFi 工作流瓶颈
Bottleneck in NiFi workflow caused by Kafka
我正在 Apache NiFi 中创建数据摄取工作流,使用 Kafka 作为缓冲系统。我有一个 3 节点集群设置 运行 相同的工作流,每个节点有 4 个核心。
我依靠多个实例将数据移入和移出不同的 Kafka 主题,这是工作流程中最慢的部分,并且在性能方面非常不一致,因为两个相同的测试最多可以有 100持续时间增加百分比。
我们的 Publish 和 Consume Kafka 处理器在所有三个节点上都是 运行,我们的 Kafka 主题在三个代理上有 3 个分区。
有没有人知道什么会导致这种不一致以及我可以做些什么来缓解它并加快工作流程?
最大的性能改进是设计您的流,以便您拥有更少的流文件,每个流文件包含许多消息,而不是许多流文件,每个流文件包含一条消息。
很难说如何为您的用例执行此操作,因为我对您的流程一无所知,例如数据格式或您对每条消息所做的操作,但让我们假装您有 CSV数据...目标是拥有一个包含多行 CSV 的流文件,而不是每行 CSV 一个流文件。
在发布方面,当您将此流文件发送到 PublishKafka_0_10 时,您可以将消息分界符 属性 设置为换行符(使用 shift+enter),它将流式传输每个CSV 到 Kafka 的行。
在消费上,如果你也设置了Message Demarcator,那么它会在一个流文件中写入很多条消息,最多可达Max Poll Records。
此外,您可以尝试调整每个处理器的并发任务(在调度选项卡上找到),以便并行进行更多发布或消费。由于您有 3 个分区和 3 个 NiFi 节点,因此在消费端增加并发任务可能没有太大好处,因此每个分区已经有一个线程,但如果您有 6 个分区和 3 个 NiFi 节点,那么您可能会受益于有 2 个并发任务。
我正在 Apache NiFi 中创建数据摄取工作流,使用 Kafka 作为缓冲系统。我有一个 3 节点集群设置 运行 相同的工作流,每个节点有 4 个核心。
我依靠多个实例将数据移入和移出不同的 Kafka 主题,这是工作流程中最慢的部分,并且在性能方面非常不一致,因为两个相同的测试最多可以有 100持续时间增加百分比。
我们的 Publish 和 Consume Kafka 处理器在所有三个节点上都是 运行,我们的 Kafka 主题在三个代理上有 3 个分区。
有没有人知道什么会导致这种不一致以及我可以做些什么来缓解它并加快工作流程?
最大的性能改进是设计您的流,以便您拥有更少的流文件,每个流文件包含许多消息,而不是许多流文件,每个流文件包含一条消息。
很难说如何为您的用例执行此操作,因为我对您的流程一无所知,例如数据格式或您对每条消息所做的操作,但让我们假装您有 CSV数据...目标是拥有一个包含多行 CSV 的流文件,而不是每行 CSV 一个流文件。
在发布方面,当您将此流文件发送到 PublishKafka_0_10 时,您可以将消息分界符 属性 设置为换行符(使用 shift+enter),它将流式传输每个CSV 到 Kafka 的行。
在消费上,如果你也设置了Message Demarcator,那么它会在一个流文件中写入很多条消息,最多可达Max Poll Records。
此外,您可以尝试调整每个处理器的并发任务(在调度选项卡上找到),以便并行进行更多发布或消费。由于您有 3 个分区和 3 个 NiFi 节点,因此在消费端增加并发任务可能没有太大好处,因此每个分区已经有一个线程,但如果您有 6 个分区和 3 个 NiFi 节点,那么您可能会受益于有 2 个并发任务。