【问题标题】:Bottleneck in NiFi workflow caused by KafkaKafka 造成的 NiFi 工作流瓶颈
【发布时间】:2017-08-15 08:50:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我们需要更多细节...... NiFi 的哪个版本?什么版本的卡夫卡经纪人?什么版本的 Kafka 处理器(0.9 vs 0.10)?您是否在 PublishKafka 前看到了流文件的堆积,或者究竟是什么变慢了?您是否一次发布和使用一条消息?
  • NiFi 1.1.0 版,Kafka 0.10.1.2.1 版,0.10 kafka 处理器,在发布 kafka 之前在队列中建立文件,使用 kafka 并没有按预期快速返回文件,我相信它一次发布和消费 1 个文件,未包含特定的批处理逻辑。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 如何将流文件中的消息批量发送给Kafka?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
相关资源
最近更新 更多