【发布时间】: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 的最小/最大线程池,以允许启动更多并发和活动线程。考虑垃圾收集调优。