Skip to main content

Manage Functions

Pulsar Functions are lightweight compute processes that

  • consume messages from one or more Pulsar topics
  • apply a user-supplied processing logic to each message
  • publish the results of the computation to another topic

Functions can be managed via the following methods.

MethodDescription
Admin CLIThe functions command of the pulsar-admin tool.
REST APIThe /admin/v3/functions endpoint of the admin REST API.
Java Admin APIThe functions method of the PulsarAdmin object in the Java API.

Function resources

You can perform the following operations on functions.

Create a function

You can create a Pulsar function in cluster mode (deploy it on a Pulsar cluster) using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the create subcommand.

Example


$ pulsar-admin functions create \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--inputs test-input-topic \
--output persistent://public/default/test-output-topic \
--classname org.apache.pulsar.functions.api.examples.ExclamationFunction \
--jar /examples/api-examples.jar

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName?version=2.6.3

Java Admin API


FunctionConfig functionConfig = new FunctionConfig();
functionConfig.setTenant(tenant);
functionConfig.setNamespace(namespace);
functionConfig.setName(functionName);
functionConfig.setRuntime(FunctionConfig.Runtime.JAVA);
functionConfig.setParallelism(1);
functionConfig.setClassName("org.apache.pulsar.functions.api.examples.ExclamationFunction");
functionConfig.setProcessingGuarantees(FunctionConfig.ProcessingGuarantees.ATLEAST_ONCE);
functionConfig.setTopicsPattern(sourceTopicPattern);
functionConfig.setSubName(subscriptionName);
functionConfig.setAutoAck(true);
functionConfig.setOutput(sinkTopic);
admin.functions().createFunction(functionConfig, fileName);

Update a function

You can update a Pulsar function that has been deployed to a Pulsar cluster using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the update subcommand.

Example


$ pulsar-admin functions update \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--output persistent://public/default/update-output-topic \
# other options

REST Admin API

PUT /admin/v3/functions/:tenant/:namespace/:functionName?version=2.6.3

Java Admin API


FunctionConfig functionConfig = new FunctionConfig();
functionConfig.setTenant(tenant);
functionConfig.setNamespace(namespace);
functionConfig.setName(functionName);
functionConfig.setRuntime(FunctionConfig.Runtime.JAVA);
functionConfig.setParallelism(1);
functionConfig.setClassName("org.apache.pulsar.functions.api.examples.ExclamationFunction");
UpdateOptions updateOptions = new UpdateOptions();
updateOptions.setUpdateAuthData(updateAuthData);
admin.functions().updateFunction(functionConfig, userCodeFile, updateOptions);

Start an instance of a function

You can start a stopped function instance with instance-id using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the start subcommand.


$ pulsar-admin functions start \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--instance-id 1

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/start?version=2.6.3

Java Admin API


admin.functions().startFunction(tenant, namespace, functionName, Integer.parseInt(instanceId));

Start all instances of a function

You can start all stopped function instances using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the start subcommand.

Example


$ pulsar-admin functions start \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/start?version=2.6.3

Java


admin.functions().startFunction(tenant, namespace, functionName);

Stop an instance of a function

You can stop a function instance with instance-id using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the stop subcommand.

Example


$ pulsar-admin functions stop \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--instance-id 1

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/stop?version=2.6.3

Java Admin API


admin.functions().stopFunction(tenant, namespace, functionName, Integer.parseInt(instanceId));

Stop all instances of a function

You can stop all function instances using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the stop subcommand.

Example


$ pulsar-admin functions stop \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/stop?version=2.6.3

Java Admin API


admin.functions().stopFunction(tenant, namespace, functionName);

Restart an instance of a function

Restart a function instance with instance-id using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the restart subcommand.

Example


$ pulsar-admin functions restart \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--instance-id 1

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/restart?version=2.6.3

Java Admin API


admin.functions().restartFunction(tenant, namespace, functionName, Integer.parseInt(instanceId));

Restart all instances of a function

You can restart all function instances using Admin CLI, REST API or Java admin API.

Admin CLI

Use the restart subcommand.

Example


$ pulsar-admin functions restart \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/restart?version=2.6.3

Java Admin API


admin.functions().restartFunction(tenant, namespace, functionName);

List all functions

You can list all Pulsar functions running under a specific tenant and namespace using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the list subcommand.

Example


$ pulsar-admin functions list \
--tenant public \
--namespace default

REST API

GET /admin/v3/functions/:tenant/:namespace?version=2.6.3

Java Admin API


admin.functions().getFunctions(tenant, namespace);

Delete a function

You can delete a Pulsar function that is running on a Pulsar cluster using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the delete subcommand.

Example


$ pulsar-admin functions delete \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions)

REST API

DELETE /admin/v3/functions/:tenant/:namespace/:functionName?version=2.6.3

Java Admin API


admin.functions().deleteFunction(tenant, namespace, functionName);

Get info about a function

You can get information about a Pulsar function currently running in cluster mode using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the get subcommand.

Example


$ pulsar-admin functions get \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions)

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName?version=2.6.3

Java Admin API


admin.functions().getFunction(tenant, namespace, functionName);

Get status of an instance of a function

You can get the current status of a Pulsar function instance with instance-id using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the status subcommand.

Example


$ pulsar-admin functions status \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--instance-id 1

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/status?version=2.6.3

Java Admin API


admin.functions().getFunctionStatus(tenant, namespace, functionName, Integer.parseInt(instanceId));

Get status of all instances of a function

You can get the current status of a Pulsar function instance using Admin CLI, REST API or Java Admin API.

Admin CLI

Use the status subcommand.

Example


$ pulsar-admin functions status \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions)

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName/status?version=2.6.3

Java Admin API


admin.functions().getFunctionStatus(tenant, namespace, functionName);

Get stats of an instance of a function

You can get the current stats of a Pulsar Function instance with instance-id using Admin CLI, REST API or Java admin API.

Admin CLI

Use the stats subcommand.

Example


$ pulsar-admin functions stats \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--instance-id 1

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/stats?version=2.6.3

Java Admin API


admin.functions().getFunctionStats(tenant, namespace, functionName, Integer.parseInt(instanceId));

Get stats of all instances of a function

You can get the current stats of a Pulsar function using Admin CLI, REST API or Java admin API.

Admin CLI

Use the stats subcommand.

Example


$ pulsar-admin functions stats \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions)

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName/stats?version=2.6.3

Java Admin API


admin.functions().getFunctionStats(tenant, namespace, functionName);

Trigger a function

You can trigger a specified Pulsar function with a supplied value using Admin CLI, REST API or Java admin API.

Admin CLI

Use the trigger subcommand.

Example


$ pulsar-admin functions trigger \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--topic (the name of input topic) \
--trigger-value \"hello pulsar\"
# or --trigger-file (the path of trigger file)

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/trigger?version=2.6.3

Java Admin API


admin.functions().triggerFunction(tenant, namespace, functionName, topic, triggerValue, triggerFile);

Put state associated with a function

You can put the state associated with a Pulsar function using Admin CLI, REST API or Java admin API.

Admin CLI

Use the putstate subcommand.

Example


$ pulsar-admin functions putstate \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--state "{\"key\":\"pulsar\", \"stringValue\":\"hello pulsar\"}"

REST API

POST /admin/v3/functions/:tenant/:namespace/:functionName/state/:key?version=2.6.3

Java Admin API


TypeReference<FunctionState> typeRef = new TypeReference<FunctionState>() {};
FunctionState stateRepr = ObjectMapperFactory.getThreadLocal().readValue(state, typeRef);
admin.functions().putFunctionState(tenant, namespace, functionName, stateRepr);

Fetch state associated with a function

You can fetch the current state associated with a Pulsar function using Admin CLI, REST API or Java admin API.

Admin CLI

Use the querystate subcommand.

Example


$ pulsar-admin functions querystate \
--tenant public \
--namespace default \
--name (the name of Pulsar Functions) \
--key (the key of state)

REST API

GET /admin/v3/functions/:tenant/:namespace/:functionName/state/:key?version=2.6.3

Java Admin CLI


admin.functions().getFunctionState(tenant, namespace, functionName, key);