如何动态地添加一个钩子而没有太多的开销?

问题描述 投票:0回答:1

假设我有这样的processElement函数:

class InputProcessor {
    public void processElement(T element) {
        nextOperator.processElement(element);
    }
}

现在,我想添加一个开/关开关,以在“开关打开”期间对元素进行计数。但是我不想添加这样的“ if else”,因为它可能会降低性能。

class InputProcessor {
    public void processElement(T element) {
        if (on) {
             count++;
        }
        nextOperator.processElement(element);
    }
}

有什么方法可以帮助实现这一目标?我有一个主意,但是我不确定它是否按预期工作(不会降低性能)。我将创建与CountInputProcessor相同的InputProcessor,但计数部分除外。

class CountInputProcessor {
    public void processElement(T element) {
        count++;
        nextOperator.processElement(element);
    }
}

并且当我打开功能时,我重新定义了运算符(InputProcessor是无状态的。

inputProcessor = new CountInputProcessor();
inputProcessor.processElement(element);

并且当我关闭功能时,我将其重新定义为旧的InputProcessor

java performance spark-streaming apache-flink flink-streaming
1个回答
0
投票

我不会担心性能下降。只要确保拓扑正确运行,如果拓扑无法按您的意愿扩展,就可以进行通常的调整,例如增加运算符的并行性。

© www.soinside.com 2019 - 2024. All rights reserved.