Kafka
You can invoke handlers via Kafka events, by doing the following:
Make sure to first register the handler you want to invoke.
Develop an event handler
You can invoke any handler via Kafka events. The event payload will be (de)serialized as JSON.
- When invoking Virtual Object or Workflow handlers via Kafka, the key of the Kafka record will be used to determine the Virtual Object/Workflow key. The key needs to be a valid UTF-8 string. The events are delivered to the subscribed handler in the order in which they arrived on the topic partition.
- When invoking Virtual Object or Workflow shared handlers via Kafka, the key of the Kafka record will be used to determine the Virtual Object/Workflow key. The key needs to be a valid UTF-8 string. The events are delivered to the subscribed handler in parallel without ordering guarantees.
- When invoking Service handlers over Kafka, events are delivered in parallel without ordering guarantees.
Since you can invoke any handler via Kafka events, a single handler can be invoked both by RPC and via Kafka.
Configure Restate to connect to a Kafka cluster
Define the Kafka cluster that Restate needs to connect to in the Restate configuration file:
[[ingress.kafka-clusters]]name = "my-cluster"brokers = ["PLAINTEXT://broker:9092"]
And make sure the Restate Server uses it via restate-server --config-file restate.toml
.
Check the configuration docs for more details.
Configuring Kafka clusters via environment variables
Register the service you want to invoke.
Subscribe the event handler to the Kafka topic
Let Restate forward events from the Kafka topic to the event handler by creating a subscription using the Admin API:
curl localhost:9070/subscriptions --json '{"source": "kafka://my-cluster/my-topic","sink": "service://MyService/handle","options": {"auto.offset.reset": "earliest"}}'
Once you've created a subscription, Restate immediately starts consuming events from Kafka. The handler will be invoked for each event received from Kafka.
The options
field is optional and accepts any configuration parameter from librdkafka configuration.
Have a look at the invocation docs for more commands to manage subscriptions.
Kafka connection configuration
Multiple Kafka clusters support
- TypeScript
- Java
- Go