Version: 0.1.4

Sink CRD configurations

This document lists CRD configurations available for Pulsar sink connectors. The sink CRD configurations consist of sink connector configurations and the common CRD configurations.

Sink configurations

This table lists sink configurations.

nameThe name of a sink connector.
classnameThe class name of a sink connector.
tenantThe tenant of a sink connector.
ClusterNameThe Pulsar cluster of a sink connector.
ReplicasThe number of instances that you want to run this sink connector. By default, the Replicas is set to 1.
MaxReplicasThe maximum number of Pulsar instances that you want to run for this sink connector. When the value of the maxReplicas parameter is greater than the value of replicas, it indicates that the sink controller automatically scales the sink connector based on the CPU usage. By default, maxReplicas is set to 0, which indicates that auto-scaling is disabled.
SinkConfigThe map to a ConfigMap specifying the configuration of a sink connector.
TimeoutThe message timeout in milliseconds.
NegativeAckRedeliveryDelayMsThe number of redelivered messages due to negative acknowledgement.
AutoAckWhether or not the framework acknowledges messages automatically. This field is required. You can set it to true or false.
MaxMessageRetryHow many times to process a message before giving up.
ProcessingGuaranteeThe processing guarantees (delivery semantics) applied to the sink connector. Available values: ATLEAST_ONCE, ATMOST_ONCE, EFFECTIVELY_ONCE.
RetainOrderingThe sink connector consumes and processes messages in order.
DeadLetterTopicThe topic where all messages that were not processed successfully are sent.
SubscriptionNameThe subscription name of the sink connector if you want a specific subscription-name for the input-topic consumer.
CleanupSubscriptionConfigure whether to clean up subscriptions.
SubscriptionPositionThe subscription position.


This section describes image options available for Pulsar sink CRDs.

Base runner

The base runner is an image base for other runners. The base runner is located at ./pulsar-functions-base-runner. The base runner image contains basic tool-chains like /pulsar/bin, /pulsar/conf and /pulsar/lib to ensure that the pulsar-admin CLI tool works properly to support Apache Pulsar Packages.

Runner images

Function Mesh uses runner images as images of Pulsar connectors. Each runner image only contains necessary tool-chains and libraries for specified runtime.

Pulsar connectors supports using the Java runner images as their images. The Java runner is based on the base runner and contains the Java function instance to run Java functions or connectors. The streamnative/pulsar-functions-java-runner Java runner is stored at the Docker Hub and is automatically updated to align with Apache Pulsar release.


The input topics of a Pulsar Function. The following table lists options available for the Input.

TopicsThe configuration of the topic from which messages are fetched.
CustomSerdeSourcesThe map of input topics to SerDe class names (as a JSON string).
CustomSchemaSourcesThe map of input topics to Schema class names (as a JSON string).
SourceSpecsThe map of source specifications to consumer specifications. Consumer specifications include these options:
- SchemaType: the built-in schema type or custom schema class name to be used for messages fetched by the connector.
- SerdeClassName: the SerDe class to be used for messages fetched by the connector.
- IsRegexPattern: configure whether the input topic adopts a Regex pattern.
- SchemaProperties: the schema properties for messages fetched by the connector.
- ConsumerProperties: the consumer properties for messages fetched by the connector.
- ReceiverQueueSize: the size of the consumer receive queue.
- CryptoConfig: cryptography configurations of the consumer.


When you specify a function or connector, you can optionally specify how much of each resource they need. The resources available to specify are CPU and memory (RAM).

If the node where a Pod is running has enough of a resource available, it is possible (and allowed) for a Pod to use more resources than its request for that resource. However, a Pod is not allowed to use more than its resource limit.


In Function Mesh, the secret is defined through a secretsMap. To use a secret, a Pod needs to reference the secret. Pods can consume secretsMaps as environment variables in a volume.

To use a secret as an environment variable in a Pod, follow these steps.

  1. Create a secret or use an existing one. Multiple Pods can reference the same secret.
  2. Modify your Pod definition in each container, which you want to consume the value of a secret key, to add an environment variable for each secret key that you want to consume.
  3. Modify your image and or command line so that the program looks for values in the specified environment variables.


Function Mesh supports running Pulsar connectors in Java.

jarLocationPath to the JAR file for the connector.

Cluster location

In Function Mesh, the Pulsar cluster is defined through a ConfigMap. Pods can consume ConfigMaps as environment variables in a volume. The Pulsar cluster ConfigMap defines the Pulsar cluster URLs.

webServiceURLThe Web service URL of the Pulsar cluster.
brokerServiceURLThe broker service URL of the Pulsar cluster.

Pod specifications

Function Mesh supports customizing the Pod running Pulsar connectors. This table lists sub-fields available for the pod field.

LabelsSpecify labels attached to a Pod.
NodeSelectorSpecify a map of key-value pairs. For a Pod running on a node, the node must have each of the indicated key-value pairs as labels.
AffinitySpecify the scheduling constraints of a Pod.
TolerationsSpecify the tolerations of a Pod.
AnnotationsSpecify the annotations attached to a Pod.
SecurityContextSpecify the security context for a Pod.
TerminationGracePeriodSecondsIt is the amount of time that Kubernetes gives for a Pod before terminating it.
VolumesIt is a list of volumes that can be mounted by containers belonging to a Pod.
ImagePullSecretsIt is an optional list of references to secrets in the same namespace for pulling any of the images used by a Pod.
InitContainersThe initialization containers belonging to a Pod. A typical use case could be using an initialization container to download a remote JAR to a local path.
SidecarsSidecar containers run together with the main function container in a Pod.