使用本地运行模式进行调试
在本地运行模式下,函数会消费并生成实际数据到一个Pulsar集群,并模拟函数在Pulsar集群中的运行方式。这提供了一种测试函数的方法,并允许您在本地机器上以线程的形式启动一个函数实例,以便于调试。
note
在Pulsar 2.4.0或更高版本中,仅适用于Java函数的本地运行模式调试。
在使用本地运行模式之前,您需要添加以下依赖项。
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-functions-local-runner-original</artifactId>
<version>${pulsar.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.21.9</version>
</dependency>
例如,您可以按以下方式运行您的函数。
FunctionConfig functionConfig = new FunctionConfig();
functionConfig.setName(functionName);
functionConfig.setInputs(Collections.singleton(sourceTopic));
functionConfig.setClassName(ExclamationFunction.class.getName());
functionConfig.setRuntime(FunctionConfig.Runtime.JAVA);
functionConfig.setOutput(sinkTopic);
LocalRunner localRunner = LocalRunner.builder().functionConfig(functionConfig).build();
localRunner.start(true);
您可以使用IDE调试函数。设置断点并手动逐步执行函数以使用真实数据进行调试。
以下代码示例展示了如何在本地运行模式下运行一个函数。
public class ExclamationFunction implements Function<String, String> {
@Override
public String process(String s, Context context) throws Exception {
return s + "!";
}
public static void main(String[] args) throws Exception {
FunctionConfig functionConfig = new FunctionConfig();
functionConfig.setName("exclamation");
functionConfig.setInputs(Collections.singleton("input"));
functionConfig.setClassName(ExclamationFunction.class.getName());
functionConfig.setRuntime(FunctionConfig.Runtime.JAVA);
functionConfig.setOutput("output");
LocalRunner localRunner = LocalRunner.builder().functionConfig(functionConfig).build();
localRunner.start(false);
}
}