1

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

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

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

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

4

1 回答 1

5

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

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

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

在消费上,如果你也设置了Message Demarcator,那么它会在一个流文件中写入多条消息,最多可达Max Poll Records。

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

于 2017-08-15T14:11:21.857 回答