Skip to main content
This feature is currently in private preview. If you want to try it out or have any questions, submit a ticket to the support team.

Configure state storage for Pulsar Functions

StreamNative Pulsar Functions support stateful functions that can maintain state across function invocations. This allows you to build more complex and powerful stream processing applications. It uses Oxia as a state storage interface. States are key-value pairs, where a key is a string and its value is arbitrary binary data - counters are stored as 64-bit big-endian binary values. Keys are scoped to an individual function and shared between instances of that function. To enable state storage for Pulsar Functions, you need to enable it explicitly when creating or updating a function by setting below arguments:
State storage is only available for Java functions for now.

Call state APIs

Pulsar Functions expose below APIs for mutating and accessing state. The following table outlines the states that can be accessed within Java functions.

Increment counter

Use incrCounter to increment the counter of a given key by the given amount. If the key does not exist, a new key is created.
To asynchronously increment the counter, you can use incrCounterAsync.

Retrieve counter

Use getCounter to retrieve the counter of a given key mutated by incrCounter.
To asynchronously retrieve the counter mutated by incrCounterAsync, you can use getCounterAsync.

Update state

Besides the counter API, Pulsar also exposes a general key/value API for functions to store and update the state of a given key.
To asynchronously update the state of a given key, you can use putStateAsync.

Retrieve state

Use getState to retrieve the state of a given key.
To asynchronously retrieve the state of a given key, you can use getStateAsync.

Delete state

Query state via CLI

You can also query function state using CLI commands. This is useful for debugging and monitoring stateful functions.
If --watch is specified, the CLI tool keeps running to get the latest value of the provided state-key.

Example

The example of WordCountFunction demonstrates how state is stored within Pulsar Functions.
  1. The function splits the received String into multiple words using regex \\..
  2. For each word, the function increments counter by 1 via incrCounter(key, amount).