Note: Pseudo code...
Below is some yaml (and no implementation) for Kafka Source and Channel...
We need a ClusterProvisioner
for our Source
e.g. like the container provisioner from Nicolas (see #513):
apiVersion: eventing.knative.dev/v1alpha1
kind: ClusterProvisioner
metadata:
name: container
spec:
reconciles:
group: eventing.knative.dev
kind: Source
and another one for the Channel (e.g. the Kafka one from Sabari in #486)
apiVersion: eventing.knative.dev/v1alpha1
kind: ClusterProvisioner
metadata:
name: kafka
spec:
reconciles:
group: eventing.knative.dev/v1alpha1
kind: Channel
Now, that we have the two Provisioners together....
Next we would need a channel:
apiVersion: eventing.knative.dev/v1alpha1
kind: Channel
metadata:
name: mychannel
spec:
provisioner:
ref:
apiVersion: eventing.knative.dev/v1alpha1
kind: ClusterProvisioner
name: kafka
And we want to connect to Apache Kafka on our source, so we might have:
apiVersion: eventing.knative.dev/v1alpha1
kind: Source
metadata:
name: kafkaevents
namespace: default
spec:
provisioner:
ref:
name: container
arguments:
image: docker.io/mrbean/kafkasource
args:
bootstrapservers: "something.somewhere.com:9092"
subscribe_to_topic: "the_truth"
Now, we need to hook our "service" to the channel:
apiVersion: eventing.knative.dev/v1alpha1
kind: Subscription
metadata:
name: listentochannel
namespace: default
spec:
from:
kind: Channel
apiVersion: eventing.knative.dev/v1alpha1
name: kafka
call:
target:
kind: Service
apiVersion: serving.knative.dev/v1alpha1
name: my-kafka-logger
Question: I am not sure how to actually connect the Channel to the Source, so that the Source can write to the channel, and my ksvc
on the Subscription
can get messages from that populated channel?
I think there are two questions here (sorry for jumping in late):
I don't have strong opinions on #1, I can see both being useful.
for #2, I believe it to be very useful to be able to Subscribe to a Source as a user action. We're only dereffing the underlying channel. This makes sense as we create additional constructs like Pipeline where you want to create a Subscription to a Pipeline. You can also Subscribe to another Subscription (if it has the proper interface, if there's no 'Result' Channel, then you can't which makes sense, it doesn't emit events). So, this duck typing I believe to be fundamental property in being able to create a usable system. Otherwise, you're left hunting for which channels belong to where.