id: admin-api-functions title: Manage Functions sidebar_label: “Functions”

import Tabs from ‘@theme/Tabs’; import TabItem from ‘@theme/TabItem’;

Important

This page only shows some frequently used operations.

  • For the latest and complete information about Pulsar admin, including commands, flags, descriptions, and more, see Pulsar admin doc

  • For the latest and complete information about REST API, including parameters, responses, samples, and more, see {@inject: rest:REST:/} API doc.

  • For the latest and complete information about Java admin API, including classes, methods, descriptions, and more, see Java admin API doc.

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 {@inject: rest: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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST Admin API”,“value”:“REST Admin API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

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

{@inject: endpoint|PUT|/admin/v3/functions/:tenant/:namespace/:functionName?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the start subcommand.


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/start?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java”,“value”:“Java”}]}>

Use the start subcommand.

Example


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/start?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the stop subcommand.

Example


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/stop?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the stop subcommand.

Example


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/stop?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the restart subcommand.

Example


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/restart?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the restart subcommand.

Example


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

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/restart?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the list subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the delete subcommand.

Example


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

{@inject: endpoint|DELETE|/admin/v3/functions/:tenant/:namespace/:functionName?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the get subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName?version=@pulsar:version_number@}


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. <Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the status subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/status?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the status subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName/status?version=@pulsar:version_number@}


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. <Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the stats subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName/:instanceId/stats?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

Use the stats subcommand.

Example


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

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName/stats?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

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)

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/trigger?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin API”,“value”:“Java Admin API”}]}>

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\"}"

{@inject: endpoint|POST|/admin/v3/functions/:tenant/:namespace/:functionName/state/:key?version=@pulsar:version_number@}


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.

<Tabs defaultValue=“Admin CLI” values={[{“label”:“Admin CLI”,“value”:“Admin CLI”},{“label”:“REST API”,“value”:“REST API”},{“label”:“Java Admin CLI”,“value”:“Java 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)

{@inject: endpoint|GET|/admin/v3/functions/:tenant/:namespace/:functionName/state/:key?version=@pulsar:version_number@}


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