JetStream channels are alpha-quality Channels that are backed by JetStream.
They offer:
- Persistence
- If the Channel's Pod goes down, all events already ACKed by the Channel will persist and be retransmitted when the Pod restarts.
- Redelivery attempts
- If downstream rejects an event, that request is attempted again. NOTE: downstream must successfully process the event within one minute or the delivery is assumed to have failed and will be reattempted.
They do not offer:
- Ordering guarantees
- Events seen downstream may not occur in the same order they were inserted into the Channel.
-
Setup Knative Eventing.
-
If not done already, install a JetStream Broker
-
Apply the NATSS configuration (from project root):
ko apply -f ./config
-
Create JetStream channels:
apiVersion: messaging.knative.dev/v1alpha1 kind: NatsJetStreamChannel metadata: name: channel-defaults namespace: knative-eventing
The major components are:
- JetStream
- JetStream Channel Controller
- JetStream Channel Dispatcher
The JetStream Channel Controller is located in one Pod.
kubectl get deployment -n knative-eventing jetstream-ch-controllerThe JetStream Channel Dispatcher receives and distributes all events. There is a single Dispatcher for all JetStream Channels.
By default the components are configured to connect to NATS at
nats://nats.nats-io.svc.cluster.local:4222.