Develop
The StreamNative cloud will find theprocess
method from the NodeJs function file, below is an example:
Avro
and Json
schema record, for Avro
scheme input and output:
Json
input and output:
Feature Matrix
The NodeJs runtime doesn’t support full features comparing to Java runtime, and it’s still in developing, below is the matrix:Input Arguments
Input | Java | Go(Pulsar) | Python | NodeJs |
---|---|---|---|---|
Custom SerDe | ✅ | ❌ | ✅ | ✅ |
Schema - Avro | ✅ | ❌ | ✅ | ✅ |
Schema - JSON | ✅ | ❌ | ✅ | ✅ |
Schema - Protobuf | ✅ | ❌ | ❌ | ❌ |
Schema - KeyValue | ✅ | ❌ | ❌ | ❌ |
Schema - AutoSchema | ✅ | ❌ | ❌ | ❌ |
Scehma - Protobuf Native | ✅ | ❌ | ❌ | ❌ |
e-2-e encryption | ✅ | ❌ | ✅ | ✅ |
maxMessageRetries | ✅ | ❌ | ❌ | ✅ |
dead-letter policy | ✅ | ❌ | ❌ | ✅ |
SubscriptionName | ✅ | ✅ | ✅ | ✅ |
SubscriptionType | ✅ | ✅ | ✅ | ✅ |
SubscriptionInitialPosition | ✅ | ❌ | ✅ | ✅ |
AutoAck | ✅ | ✅ | ✅ | ✅ |
Output Arguments
Output | Java | Go(Pulsar) | Python | NodeJs |
---|---|---|---|---|
Custom SerDe | ✅ | ❌ | ✅ | ✅ |
Schema - Avro | ✅ | ❌ | ✅ | ✅ |
Schema - JSON | ✅ | ❌ | ✅ | ✅ |
Schema - Protobuf | ✅ | ❌ | ❌ | ❌ |
Schema - KeyValue | ✅ | ❌ | ❌ | ❌ |
Schema - AutoSchema | ✅ | ❌ | ❌ | ❌ |
Schema - Protobuf Native | ✅ | ❌ | ❌ | ❌ |
useThreadLocalProducers | ✅ | ❌ | ❌ | ✅ |
Key-based Batcher | ✅ | ✅ | ✅ | ✅ |
e-2-e encryption | ✅ | ❌ | ✅ | ✅ |
Compression | ✅ | ✅ | ✅ | ✅ |
Context
Context | Java | Go(Pulsar) | Python | NodeJs |
---|---|---|---|---|
InputTopics | ✅ | ✅ | ✅ | ✅ |
OutputTopic | ✅ | ✅ | ✅ | ✅ |
CurrentRecord | ✅ | ✅ | ✅ | ✅ |
OutputSchemaType | ✅ | ❌ | ✅ | ✅ |
Tenant | ✅ | ✅ | ✅ | ✅ |
Namespace | ✅ | ✅ | ✅ | ✅ |
FunctionName | ✅ | ✅ | ✅ | ✅ |
FunctionId | ✅ | ✅ | ✅ | ✅ |
InstanceId | ✅ | ✅ | ✅ | ✅ |
NumInstances | ✅ | ❌ | ✅ | ✅ |
FunctionVersion | ✅ | ✅ | ✅ | ✅ |
PulsarAdminClient | ✅ | ❌ | ❌ | ❌ |
GetLogger | ✅ | ❌ | ✅ | ✅ |
RecordMetrics | ✅ | ✅ | ✅ | ❌ |
UserConfig | ✅ | ✅ | ✅ | ✅ |
Secrets | ✅ | ❌ | ✅ | ✅ |
State | ✅ | ❌ | ❌ | ✅ |
Publish | ✅ | ✅ | ✅ | ✅ |
ConsumerBuilder | ✅ | ❌ | ❌ | ❌ |
Seek / Pause / Resume | ✅ | ❌ | ❌ | ❌ |
PulsarClient | ✅ | ❌ | ❌ | ❌ |
Other
Other | Java | Go(Pulsar) | Python | NodeJs |
---|---|---|---|---|
Resources | ✅ | ✅ | ✅ | ✅ |
At-most-once | ✅ | ✅ | ✅ | ✅ |
At-least-once | ✅ | ✅ | ✅ | ✅ |
Effectively-once | ✅ | ❌ | ✅ | ❌ |
Package
You can either provide a single.js
file or package your function into a .zip
file when creating NodeJs functions.
A zip file should contain:
- the
pacakge.json
file - other source code file
package.json
:
package.json
:
package.json
and handle your function.
Deploy
After creating a cluster, set up your environment and develop&package your function, you can use thesnctl
, pulsarctl
, pulsar-admin
command, the REST API, or terraform
to deploy a Pulsar function to your cluster.
You can create a NodeJs Pulsar function by using a local .js
or .zip
file or an uploaded Pulsar functions package(recommend).
(Optional) Upload your function file to Pulsar
It’s recommend to upload your function file to Pulsar before you create a function. Since you can add a version suffix to the package.Upload packagesYou should see the following output:
Create
Since Pulsar doesn’t support NodeJs runtime, we need to use
--py
to specify the function file and specify the --custom-runtime-options '{"genericKind": "nodejs"}'
to make it work.What’s next?
- Learn how to develop WASM functions.
- Learn how to manage functions.
- Learn how to monitor functions.
- Reference common configurations.