我正在apachenifi中创建一个数据摄取工作流,使用kafka作为缓冲系统。我有一个运行相同工作流的3节点集群,每个节点有4个核心。
我依赖于在不同的kafka主题之间来回移动数据的几个示例,这是工作流中最慢的部分,并且在性能方面非常不一致,因为两个相同的测试的持续时间最多可以增加100%。
我们的发布和使用kafka处理器在所有三个节点上运行,我们的kafka主题有三个分区,分别跨三个代理。
有没有人知道什么会导致这种不一致,我可以做些什么来减轻这种不一致,加快工作流程?
我正在apachenifi中创建一个数据摄取工作流,使用kafka作为缓冲系统。我有一个运行相同工作流的3节点集群,每个节点有4个核心。
我依赖于在不同的kafka主题之间来回移动数据的几个示例,这是工作流中最慢的部分,并且在性能方面非常不一致,因为两个相同的测试的持续时间最多可以增加100%。
我们的发布和使用kafka处理器在所有三个节点上运行,我们的kafka主题有三个分区,分别跨三个代理。
有没有人知道什么会导致这种不一致,我可以做些什么来减轻这种不一致,加快工作流程?
1条答案
按热度按时间axkjgtzd1#
最大的一个性能改进是设计流,这样每个流文件中包含多条消息的流文件就更少了,而不是每个流文件中包含一条消息的多个流文件。
很难说如何为你的用例做到这一点,因为我对你的流一无所知,比如数据的格式或者你对每条消息都做了什么,但是让我们假设你有csv数据…目标是一个流文件有多行csv,而不是每行csv有一个流文件。
在发布端,当您将此流文件发送到publishkafka\u 0\u 10时,您会将message-fercalator属性设置为新行(使用shift+enter),并将csv的每一行流式传输到kafka。
在消费端,如果还设置了消息标定器,则它将向一个流文件写入多条消息,最多可写入max poll记录。
此外,您可以尝试调整每个处理器的并发任务(位于“调度”选项卡上),以便并行执行更多的发布或消耗。增加消费端的并发任务可能没有什么好处,因为您有3个分区和3个nifi节点,因此每个分区都有一个线程,但是如果您有6个分区和3个nifi节点,那么您可能会从有2个并发任务中受益。