Apache Kafka Channel Example
- Ensure that you meet the prerequisites listed in the Apache Kafka overview.
- A Kubernetes cluster with .
Creating a KafkaChannel
channel CRD
Create a new object by configuring the YAML file as follows:
To configure the usage of the KafkaChannel
CRD as the , edit the default-ch-webhook
ConfigMap as follows:
cat <<-EOF | kubectl apply -f -
---
apiVersion: v1
kind: ConfigMap
metadata:
name: default-ch-webhook
namespace: knative-eventing
# Configuration for defaulting channels that do not specify CRD implementations.
default-ch-config: |
clusterDefault:
apiVersion: messaging.knative.dev/v1beta1
kind: KafkaChannel
spec:
replicationFactor: 1
EOF
Creating an Apache Kafka channel using the default channel configuration
Now that KafkaChannel
is set as the default channel configuration, you can use the channels.messaging.knative.dev
CRD to create a new Apache Kafka channel, using the generic Channel
:
cat <<-EOF | kubectl apply -f -
---
apiVersion: messaging.knative.dev/v1
kind: Channel
metadata:
name: testchannel-one
EOF
Check Kafka for a testchannel
topic. With Strimzi this can be done by using the command:
kubectl -n kafka exec -it my-cluster-kafka-0 -- bin/kafka-topics.sh --zookeeper localhost:2181 --list
The Apache Kafka topic that is created by the channel implementation is prefixed with knative-messaging-kafka
. This indicates it is an Apache Kafka channel from Knative. It contains the name of the namespace, default
in this example, followed by the actual name of the channel.
To setup a broker that will use the new default Kafka channels, you must create a new default broker, using the command:
apiVersion: eventing.knative.dev/v1
metadata:
name: default
EOF
This will give you two pods, such as:
default-broker-filter-64658fc79f-nf596 1/1 Running 0 15m
default-broker-ingress-ff79755b6-vj9jt 1/1 Running 0 15m
Inside the Apache Kafka cluster you should see two new topics, such as:
...
knative-messaging-kafka.default.default-kn2-ingress
knative-messaging-kafka.default.default-kn2-trigger
...
Creating a service and trigger to use the Apache Kafka broker
Install
ksvc
, using the command:Install a source that publishes to the default broker
kubectl apply -f 020-k8s-events.yaml
Create a trigger that routes the events to the
ksvc
:kubectl apply -f 030-trigger.yaml
Now that your Eventing cluster is configured for Apache Kafka, you can verify your configuration with the following options.
kubectl logs --selector='serving.knative.dev/service=broker-kafka-display' -c user-container