Enable stateful functions
When the stateful APIs of Pulsar Functions are required – for example, putState() and queryState() related interfaces – you need to enable the stateful function feature in function workers.
To enable the stateful function feature in function workers, complete the following steps.
- 
Enable the streamStorageservice in BookKeeper. Currently, the service uses the NAR package, so you need to set the configuration in theconf/bookkeeper.conffile.##################################################################
 ##################################################################
 # Settings below are used by stream/table service
 ##################################################################
 ##################################################################
 ### Grpc Server ###
 # the grpc server port to listen on. default is 4181
 storageserver.grpc.port=4181
 ### Dlog Settings for table service ###
 #### Replication Settings
 dlog.bkcEnsembleSize=3
 dlog.bkcWriteQuorumSize=2
 dlog.bkcAckQuorumSize=2
 ### Storage ###
 # local storage directories for storing table ranges data (e.g. rocksdb sst files)
 storage.range.store.dirs=data/bookkeeper/ranges
 # whether the storage server capable of serving readonly tables. default is false.
 storage.serve.readonly.tables=false
 # the cluster controller schedule interval, in milliseconds. default is 30 seconds.
 storage.cluster.controller.schedule.interval.ms=30000
- 
After starting the bookie, use the following methods to check whether the streamStorageservice has been started successfully.- 
Input: telnet localhost 4181
- 
Output: Trying 127.0.0.1...
 Connected to localhost.
 Escape character is '^]'.
 
- 
- 
Configure stateStorageServiceUrlin theconf/functions_worker.ymlfile.bk-service-urlis the service URL pointing to the BookKeeper table service.stateStorageServiceUrl: bk://<bk-service-url>:4181