【问题标题】:NiFi: poor performance of ConsumeKafkaRecord_2_0 and ConsumeKafka_2_0NiFi:ConsumeKafkaRecord_2_0 和 ConsumeKafka_2_0 的性能不佳
【发布时间】:2020-05-30 15:27:11
【问题描述】:

我正在尝试使用 Apache NiFi(nifi-1.11.4-RC1,OpenJDK 8,RHEL7)从相对较大的主题(十亿+记录,超过 100 GiB,单个分区)加载消息,但性能似乎很远太低了:

ConsumeKafka_2_0 每 5 分钟 1248429 条消息 (276.2 MB) 和 ConsumeKafkaRecord_2_0 295 批次 (282.5 MB)。 IE。 每秒仅 4161 条消息 (920 KB)

kafka-consumer-perf-test.sh(同一个节点,同一个消费者组,同一个主题)的结果更令人印象深刻: 每秒 263.4 MB(1190937 条记录)。对于任何合理的开销来说差异太大。

我按照Best practices for setting up a high performance NiFi installation配置了集群,但是吞吐量没有增加。

每个节点有 256 GB RAM 和 20 个内核,Maximum Timer Driven Thread Count 设置为 120,但 NiFi GUI 仅显示 1 或 2 个活动线程,CPU 负载几乎为零,因此磁盘队列。

我已经测试了几个流程,但即使是具有自动终止“成功”关系的 ConsumeKafka_2_0 也显示出相同的速度。

是否可以提高这些处理器的性能?它看起来像是一些人为的限制或节流,因为我找不到任何瓶颈......

请帮忙,我完全卡住了!

UPD1:

    # JVM memory settings
    java.arg.2=-Xms10240m
    java.arg.3=-Xmx10240m

调度策略:计时器驱动

并发任务:64

运行计划:0 秒

执行:所有节点

最大计时器驱动线程数:120

最大事件驱动线程数:20

UPD2:

当我使用一个ConsumeKafka_2_0处理器同时消费具有多个分区或多个主题的主题时,或者当我使用具有相同主题的不同消费者组的多个处理器时,总吞吐量会相应增加。

因此,最大计时器驱动线程数并发任务不是罪魁祸首。问题出在任务调度或处理器本身的某个地方。

【问题讨论】:

  • 使用 Nifi 的最小/最大内存更新帖子。使用 Consume Proc 的调度和并发更新帖子。查看 NiFi 的最小/最大线程池,以允许启动更多并发和活动线程。考虑垃圾收集调优。

标签: apache-kafka apache-nifi


【解决方案1】:

我们通过将处理器的 yield 持续时间从 1 秒更改为 0 秒并将套接字的缓冲区大小增加到 1 MB,成功提高了 ConsumeKafka 吞吐量。

receive.buffer.bytes=1048576

您可以在这里找到其他可以尝试的方法: https://blog.newrelic.com/engineering/kafka-best-practices/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2016-11-06
    • 2019-06-15
    相关资源
    最近更新 更多