docs/archived/v0.23-docs/eventing/index.xml

1903 lines
194 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Knative Knative Eventing</title>
<link>https://knative.dev/v0.23-docs/eventing/</link>
<description>Recent content in Knative Eventing on Knative</description>
<generator>Hugo -- gohugo.io</generator>
<atom:link href="https://knative.dev/v0.23-docs/eventing/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>V0.23-Docs: Getting Started with Knative Eventing</title>
<link>https://knative.dev/v0.23-docs/eventing/getting-started/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/getting-started/</guid>
<description>
&lt;p&gt;After you install Knative Eventing, you can create, send, and verify events.
This guide shows how you can use a basic workflow for managing events.&lt;/p&gt;
&lt;p&gt;Before you start to manage events, you must create the objects needed to
transport the events.&lt;/p&gt;
&lt;h2 id=&#34;creating-a-knative-eventing-namespace&#34;&gt;Creating a Knative Eventing namespace&lt;/h2&gt;
&lt;p&gt;Namespaces are used to group together and organize your Knative resources.&lt;/p&gt;
&lt;!--TODO: Add documentation about namespaces to core docs?--&gt;
&lt;p&gt;Create a new namespace called &lt;code&gt;event-example&lt;/code&gt; by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create namespace event-example
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;adding-a-broker-to-the-namespace&#34;&gt;Adding a broker to the namespace&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;../broker&#34;&gt;broker&lt;/a&gt; allows you to route events to different event sinks or consumers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add a broker named &lt;code&gt;default&lt;/code&gt; to your namespace by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl create -f - &amp;lt;&amp;lt;EOF
apiVersion: eventing.knative.dev/v1
kind: broker
metadata:
name: default
namespace: event-example
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the broker is working correctly, by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example get broker default
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This shows information about your broker. If the broker is working correctly, it shows a &lt;code&gt;READY&lt;/code&gt; status of &lt;code&gt;True&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME READY REASON URL AGE
default True http://broker-ingress.knative-eventing.svc.cluster.local/event-example/default 1m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If &lt;code&gt;READY&lt;/code&gt; is &lt;code&gt;False&lt;/code&gt;, wait a few moments and then run the command again.
If you continue to receive the &lt;code&gt;False&lt;/code&gt; status, see the &lt;a href=&#34;../debugging/&#34;&gt;Debugging Guide&lt;/a&gt; to troubleshoot the issue.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;creating-event-consumers&#34;&gt;Creating event consumers&lt;/h2&gt;
&lt;p&gt;In this step, you create two event consumers, &lt;code&gt;hello-display&lt;/code&gt; and &lt;code&gt;goodbye-display&lt;/code&gt;, to
demonstrate how you can configure your event producers to target a specific consumer.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To deploy the &lt;code&gt;hello-display&lt;/code&gt; consumer to your cluster, run the following
command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example apply -f - &amp;lt;&amp;lt; EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-display
spec:
replicas: 1
selector:
matchLabels: &amp;amp;labels
app: hello-display
template:
metadata:
labels: *labels
spec:
containers:
- name: event-display
image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
---
kind: Service
apiVersion: v1
metadata:
name: hello-display
spec:
selector:
app: hello-display
ports:
- protocol: TCP
port: 80
targetPort: 8080
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To deploy the &lt;code&gt;goodbye-display&lt;/code&gt; consumer to your cluster, run the following
command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example apply -f - &amp;lt;&amp;lt; EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: goodbye-display
spec:
replicas: 1
selector:
matchLabels: &amp;amp;labels
app: goodbye-display
template:
metadata:
labels: *labels
spec:
containers:
- name: event-display
# Source code: https://github.com/knative/eventing/tree/main/cmd/event_display
image: gcr.io/knative-releases/knative.dev/eventing/cmd/event_display
---
kind: Service
apiVersion: v1
metadata:
name: goodbye-display
spec:
selector:
app: goodbye-display
ports:
- protocol: TCP
port: 80
targetPort: 8080
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the event consumers are working by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example get deployments hello-display goodbye-display
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This lists the &lt;code&gt;hello-display&lt;/code&gt; and &lt;code&gt;goodbye-display&lt;/code&gt; consumers that you
deployed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME READY UP-TO-DATE AVAILABLE AGE
hello-display 1/1 1 1 26s
goodbye-display 1/1 1 1 16s
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The number of replicas in the &lt;strong&gt;READY&lt;/strong&gt; column should match the number of replicas in the &lt;strong&gt;AVAILABLE&lt;/strong&gt; column.
If the numbers do not match, see the &lt;a href=&#34;../debugging/&#34;&gt;Debugging Guide&lt;/a&gt; to troubleshoot the issue.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;creating-triggers&#34;&gt;Creating triggers&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&#34;../broker/triggers&#34;&gt;trigger&lt;/a&gt; defines the events that each event consumer receives.
Brokers use triggers to forward events to the correct consumers.
Each trigger can specify a filter that enables selection of relevant events based on the Cloud Event context attributes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a trigger by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example apply -f - &amp;lt;&amp;lt; EOF
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: hello-display
spec:
broker: default
filter:
attributes:
type: greeting
subscriber:
ref:
apiVersion: v1
kind: Service
name: hello-display
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The command creates a trigger that sends all events of type &lt;code&gt;greeting&lt;/code&gt; to
your event consumer named &lt;code&gt;hello-display&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To add a second trigger, enter the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example apply -f - &amp;lt;&amp;lt; EOF
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: goodbye-display
spec:
broker: default
filter:
attributes:
source: sendoff
subscriber:
ref:
apiVersion: v1
kind: Service
name: goodbye-display
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The command creates a trigger that sends all events of source &lt;code&gt;sendoff&lt;/code&gt; to
your event consumer named &lt;code&gt;goodbye-display&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that the triggers are working correctly by running the following
command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example get triggers
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This returns the &lt;code&gt;hello-display&lt;/code&gt; and &lt;code&gt;goodbye-display&lt;/code&gt; triggers that you
created:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME READY REASON BROKER SUBSCRIBER_URI AGE
goodbye-display True default http://goodbye-display.event-example.svc.cluster.local/ 9s
hello-display True default http://hello-display.event-example.svc.cluster.local/ 16s
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the triggers are correctly configured, they will be ready and pointing to the correct broker (&lt;code&gt;default&lt;/code&gt;) and &lt;code&gt;SUBSCRIBER_URI&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;SUBSCRIBER_URI&lt;/code&gt; has a value similar to &lt;code&gt;triggerName.namespaceName.svc.cluster.local&lt;/code&gt;.
The exact value depends on the broker implementation.
If this value looks incorrect, see the &lt;a href=&#34;../debugging/&#34;&gt;Debugging Guide&lt;/a&gt; to troubleshoot the issue.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;creating-a-pod-as-an-event-producer&#34;&gt;Creating a pod as an event producer&lt;/h2&gt;
&lt;p&gt;This guide uses &lt;code&gt;curl&lt;/code&gt; commands to manually send individual events as HTTP requests to the broker, and demonstrate how these events are received by the correct event consumer.&lt;/p&gt;
&lt;p&gt;The broker can only be accessed from within the cluster where Knative Eventing is installed. You must create a pod within that cluster to act as an event producer that will execute the &lt;code&gt;curl&lt;/code&gt; commands.&lt;/p&gt;
&lt;p&gt;To create a pod, enter the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example apply -f - &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: Pod
metadata:
labels:
run: curl
name: curl
spec:
containers:
# This could be any image that we can SSH into and has curl.
- image: radial/busyboxplus:curl
imagePullPolicy: IfNotPresent
name: curl
resources: {}
stdin: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
tty: true
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sending-events-to-the-broker&#34;&gt;Sending events to the broker&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SSH into the pod by running the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl -n event-example attach curl -it
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You will see a prompt similar to the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Defaulting container name to curl.
Use &#39;kubectl describe pod/ -n event-example&#39; to see all of the containers in this pod.
If you don&#39;t see a command prompt, try pressing enter.
[ root@curl:/ ]$
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Make a HTTP request to the broker. To show the various types of events you can send, you will make three requests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To make the first request, which creates an event that has the &lt;code&gt;type&lt;/code&gt;
&lt;code&gt;greeting&lt;/code&gt;, run the following in the SSH terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -v &amp;quot;http://broker-ingress.knative-eventing.svc.cluster.local/event-example/default&amp;quot; \
-X POST \
-H &amp;quot;Ce-Id: say-hello&amp;quot; \
-H &amp;quot;Ce-Specversion: 1.0&amp;quot; \
-H &amp;quot;Ce-Type: greeting&amp;quot; \
-H &amp;quot;Ce-Source: not-sendoff&amp;quot; \
-H &amp;quot;Content-Type: application/json&amp;quot; \
-d &#39;{&amp;quot;msg&amp;quot;:&amp;quot;Hello Knative!&amp;quot;}&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When the broker receives your event, &lt;code&gt;hello-display&lt;/code&gt; will activate and send
it to the event consumer of the same name.
If the event has been received, you will receive a &lt;code&gt;202 Accepted&lt;/code&gt; response
similar to the one below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; HTTP/1.1 202 Accepted
&amp;lt; Content-Length: 0
&amp;lt; Date: Mon, 12 Aug 2019 19:48:18 GMT
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To make the second request, which creates an event that has the &lt;code&gt;source&lt;/code&gt;
&lt;code&gt;sendoff&lt;/code&gt;, run the following in the SSH terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -v &amp;quot;http://broker-ingress.knative-eventing.svc.cluster.local/event-example/default&amp;quot; \
-X POST \
-H &amp;quot;Ce-Id: say-goodbye&amp;quot; \
-H &amp;quot;Ce-Specversion: 1.0&amp;quot; \
-H &amp;quot;Ce-Type: not-greeting&amp;quot; \
-H &amp;quot;Ce-Source: sendoff&amp;quot; \
-H &amp;quot;Content-Type: application/json&amp;quot; \
-d &#39;{&amp;quot;msg&amp;quot;:&amp;quot;Goodbye Knative!&amp;quot;}&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When the broker receives your event, &lt;code&gt;goodbye-display&lt;/code&gt; will activate and
send the event to the event consumer of the same name.
If the event has been received, you will receive a &lt;code&gt;202 Accepted&lt;/code&gt; response
similar to the one below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; HTTP/1.1 202 Accepted
&amp;lt; Content-Length: 0
&amp;lt; Date: Mon, 12 Aug 2019 19:48:18 GMT
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To make the third request, which creates an event that has the &lt;code&gt;type&lt;/code&gt;
&lt;code&gt;greeting&lt;/code&gt; and the&lt;code&gt;source&lt;/code&gt; &lt;code&gt;sendoff&lt;/code&gt;, run the following in the SSH terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -v &amp;quot;http://broker-ingress.knative-eventing.svc.cluster.local/event-example/default&amp;quot; \
-X POST \
-H &amp;quot;Ce-Id: say-hello-goodbye&amp;quot; \
-H &amp;quot;Ce-Specversion: 1.0&amp;quot; \
-H &amp;quot;Ce-Type: greeting&amp;quot; \
-H &amp;quot;Ce-Source: sendoff&amp;quot; \
-H &amp;quot;Content-Type: application/json&amp;quot; \
-d &#39;{&amp;quot;msg&amp;quot;:&amp;quot;Hello Knative! Goodbye Knative!&amp;quot;}&#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When the broker receives your event, &lt;code&gt;hello-display&lt;/code&gt; and &lt;code&gt;goodbye-display&lt;/code&gt;
will activate and send the event to the event consumers of the same name.
If the event has been received, you will receive a &lt;code&gt;202 Accepted&lt;/code&gt; response
similar to the one below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; HTTP/1.1 202 Accepted
&amp;lt; Content-Length: 0
&amp;lt; Date: Mon, 12 Aug 2019 19:48:18 GMT
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exit SSH by typing &lt;code&gt;exit&lt;/code&gt; into the command prompt.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You have sent two events to the &lt;code&gt;hello-display&lt;/code&gt; event consumer and two events to
the &lt;code&gt;goodbye-display&lt;/code&gt; event consumer (note that &lt;code&gt;say-hello-goodbye&lt;/code&gt; activates
the trigger conditions for &lt;em&gt;both&lt;/em&gt; &lt;code&gt;hello-display&lt;/code&gt; and &lt;code&gt;goodbye-display&lt;/code&gt;). You
will verify that these events were received correctly in the next section.&lt;/p&gt;
&lt;h2 id=&#34;verifying-that-events-were-received&#34;&gt;Verifying that events were received&lt;/h2&gt;
&lt;p&gt;After you send the events, verify that the events were received by the correct subscribers.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Look at the logs for the &lt;code&gt;hello-display&lt;/code&gt; event consumer by entering the
following command:
&lt;pre&gt;&lt;code&gt;kubectl -n event-example logs -l app=hello-display --tail=100
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This returns the &lt;code&gt;Attributes&lt;/code&gt; and &lt;code&gt;Data&lt;/code&gt; of the events you sent to
&lt;code&gt;hello-display&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: greeting
source: not-sendoff
id: say-hello
time: 2019-05-20T17:59:43.81718488Z
contenttype: application/json
Extensions,
knativehistory: default-broker-srk54-channel-24gls.event-example.svc.cluster.local
Data,
{
&amp;quot;msg&amp;quot;: &amp;quot;Hello Knative!&amp;quot;
}
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: greeting
source: sendoff
id: say-hello-goodbye
time: 2019-05-20T17:59:54.211866425Z
contenttype: application/json
Extensions,
knativehistory: default-broker-srk54-channel-24gls.event-example.svc.cluster.local
Data,
{
&amp;quot;msg&amp;quot;: &amp;quot;Hello Knative! Goodbye Knative!&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Look at the logs for the &lt;code&gt;goodbye-display&lt;/code&gt; event consumer by entering the
following command:
&lt;pre&gt;&lt;code&gt;kubectl -n event-example logs -l app=goodbye-display --tail=100
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This returns the &lt;code&gt;Attributes&lt;/code&gt; and &lt;code&gt;Data&lt;/code&gt; of the events you sent to
&lt;code&gt;goodbye-display&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: not-greeting
source: sendoff
id: say-goodbye
time: 2019-05-20T17:59:49.044926148Z
contenttype: application/json
Extensions,
knativehistory: default-broker-srk54-channel-24gls.event-example.svc.cluster.local
Data,
{
&amp;quot;msg&amp;quot;: &amp;quot;Goodbye Knative!&amp;quot;
}
☁️ cloudevents.Event
Validation: valid
Context Attributes,
specversion: 1.0
type: greeting
source: sendoff
id: say-hello-goodbye
time: 2019-05-20T17:59:54.211866425Z
contenttype: application/json
Extensions,
knativehistory: default-broker-srk54-channel-24gls.event-example.svc.cluster.local
Data,
{
&amp;quot;msg&amp;quot;: &amp;quot;Hello Knative! Goodbye Knative!&amp;quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;cleaning-up-example-resources&#34;&gt;Cleaning up example resources&lt;/h2&gt;
&lt;p&gt;You can delete the &lt;code&gt;event-example&lt;/code&gt; namespace and its associated resources from your cluster if you do not plan to use it again in the future.&lt;/p&gt;
&lt;p&gt;Delete the &lt;code&gt;event-example&lt;/code&gt; namespace and all of its resources from your cluster by entering the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl delete namespace event-example
&lt;/code&gt;&lt;/pre&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Event sources</title>
<link>https://knative.dev/v0.23-docs/eventing/sources/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/sources/</guid>
<description>
&lt;p&gt;An event source is a Kubernetes custom resource (CR), created by a developer or cluster administrator, that acts as a link between an event producer and an event &lt;em&gt;sink&lt;/em&gt;.
A sink can be a k8s service, including Knative Services, a Channel, or a Broker that receives events from an event source.&lt;/p&gt;
&lt;p&gt;Event sources are created by instantiating a CR from a Source object.
The Source object defines the arguments and parameters needed to instantiate a CR.&lt;/p&gt;
&lt;p&gt;All Sources are part of the &lt;code&gt;sources&lt;/code&gt; category.&lt;/p&gt;
&lt;ul class=&#34;nav nav-tabs&#34; id=&#34;list-event-sources&#34; role=&#34;tablist&#34;&gt;
&lt;li class=&#34;nav-item active&#34;&gt;
&lt;a class=&#34;nav-link active&#34; id=&#34;list-event-sources-0-tab&#34; data-toggle=&#34;tab&#34; href=&#34;#list-event-sources-0&#34; role=&#34;tab&#34; aria-controls=&#34;list-event-sources-0&#34; aria-selected=&#34;true&#34;&gt;kubectl&lt;/a&gt;
&lt;/li&gt;
&lt;li class=&#34;nav-item &#34;&gt;
&lt;a class=&#34;nav-link &#34; id=&#34;list-event-sources-1-tab&#34; data-toggle=&#34;tab&#34; href=&#34;#list-event-sources-1&#34; role=&#34;tab&#34; aria-controls=&#34;list-event-sources-1&#34; aria-selected=&#34;true&#34;&gt;kn&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;tab-content&#34; &gt;
&lt;div class=&#34;tab-pane fade show active&#34; id=&#34;list-event-sources-0&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;list-event-sources-0-tab&#34;&gt;
&lt;p&gt;You can list existing event sources on your cluster by entering the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl get sources
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;tab-pane fade &#34; id=&#34;list-event-sources-1&#34; role=&#34;tabpanel&#34; aria-labelledby=&#34;list-event-sources-1-tab&#34;&gt;
&lt;p&gt;You can list existing event sources on your cluster by entering the kn command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kn &lt;span style=&#34;color:#204a87&#34;&gt;source&lt;/span&gt; list
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;knative-sources&#34;&gt;Knative Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;API Version&lt;/th&gt;
&lt;th&gt;Maintainer&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;./apiserversource&#34;&gt;APIServerSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Brings Kubernetes API server events into Knative. The APIServerSource fires a new event each time a Kubernetes resource is created, updated or deleted.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative-sandbox/eventing-awssqs/tree/main/samples&#34;&gt;AWS SQS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://aws.amazon.com/sqs/&#34;&gt;AWS Simple Queue Service&lt;/a&gt; messages into Knative. The AwsSqsSource fires a new event each time an event is published on an &lt;a href=&#34;https://aws.amazon.com/sqs/&#34;&gt;AWS SQS topic&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;../samples/apache-camel-source&#34;&gt;Apache Camel&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Enables use of &lt;a href=&#34;https://github.com/apache/camel&#34;&gt;Apache Camel&lt;/a&gt; components for pushing events into Knative. A CamelSource is an event source that can represent any existing &lt;a href=&#34;https://github.com/apache/camel/tree/master/components&#34;&gt;Apache Camel component&lt;/a&gt;, that provides a consumer side, and enables publishing events to an addressable endpoint. Each Camel endpoint has the form of a URI where the scheme is the ID of the component to use. CamelSource requires &lt;a href=&#34;https://github.com/apache/camel-k#installation&#34;&gt;Camel-K&lt;/a&gt; to be installed into the current namespace. See the &lt;a href=&#34;https://github.com/knative-sandbox/eventing-camel/tree/main/samples&#34;&gt;CamelSource&lt;/a&gt; example.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative-sandbox/eventing-couchdb/blob/main/source&#34;&gt;Apache CouchDB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://couchdb.apache.org/&#34;&gt;Apache CouchDB&lt;/a&gt; messages into Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;../samples/kafka&#34;&gt;Apache Kafka&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1beta1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://kafka.apache.org/&#34;&gt;Apache Kafka&lt;/a&gt; messages into Knative. The KafkaSource reads events from an Apache Kafka Cluster, and passes these events to a sink so that they can be consumed. See the &lt;a href=&#34;https://github.com/knative-sandbox/eventing-kafka/blob/main/pkg/source&#34;&gt;Kafka Source&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;./containersource&#34;&gt;Container Source&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;The ContainerSource will instantiate container image(s) that can generate events until the ContainerSource is deleted. This may be used, for example, to poll an FTP server for new files or generate events at a set time interval. Given a &lt;code&gt;spec.template&lt;/code&gt; with at least a container image specified, ContainerSource will keep a &lt;code&gt;Pod&lt;/code&gt; running with the specified image(s). &lt;code&gt;K_SINK&lt;/code&gt; (destination address) and &lt;code&gt;KE_CE_OVERRIDES&lt;/code&gt; (JSON CloudEvents attributes) environment variables are injected into the running image(s). It is used by multiple other Sources as underlying infrastructure. Refer to the &lt;a href=&#34;../samples/container-source&#34;&gt;Container Source&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;../samples/github-source&#34;&gt;GitHub&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Registers for events of the specified types on the specified GitHub organization or repository, and brings those events into Knative. The GitHubSource fires a new event for selected &lt;a href=&#34;https://developer.github.com/v3/activity/events/types/&#34;&gt;GitHub event types&lt;/a&gt;. See the &lt;a href=&#34;../samples/github-source&#34;&gt;GitHub Source&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;../samples/gitlab-source&#34;&gt;GitLab&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Registers for events of the specified types on the specified GitLab repository, and brings those events into Knative. The GitLabSource creates a webhooks for specified &lt;a href=&#34;https://docs.gitlab.com/ee/user/project/integrations/webhooks.html#events&#34;&gt;event types&lt;/a&gt;, listens for incoming events, and passes them to a consumer. See the &lt;a href=&#34;../samples/gitlab-source&#34;&gt;GitLab Source&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative/eventing/tree/main/cmd/heartbeats&#34;&gt;Heartbeats&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Uses an in-memory timer to produce events at the specified interval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;./pingsource&#34;&gt;PingSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1beta2&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Produces events with a fixed payload on a specified &lt;a href=&#34;https://en.wikipedia.org/wiki/Cron&#34;&gt;Cron&lt;/a&gt; schedule. See the &lt;a href=&#34;../samples/ping-source&#34;&gt;Ping Source&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative-sandbox/eventing-rabbitmq&#34;&gt;RabbitMQ&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Active development&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://www.rabbitmq.com/&#34;&gt;RabbitMQ&lt;/a&gt; messages into Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;./sinkbinding/&#34;&gt;SinkBinding&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;The SinkBinding can be used to author new event sources using any of the familiar compute abstractions that Kubernetes makes available (e.g. Deployment, Job, DaemonSet, StatefulSet), or Knative abstractions (e.g. Service, Configuration). SinkBinding provides a framework for injecting &lt;code&gt;K_SINK&lt;/code&gt; (destination address) and &lt;code&gt;K_CE_OVERRIDES&lt;/code&gt; (JSON cloudevents attributes) environment variables into any Kubernetes resource which has a &lt;code&gt;spec.template&lt;/code&gt; that looks like a Pod (aka PodSpecable). See the &lt;a href=&#34;../samples/container-source&#34;&gt;SinkBinding&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative/eventing/tree/main/cmd/websocketsource&#34;&gt;WebSocket&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Opens a WebSocket to the specified source and packages each received message as a Knative event.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;third-party-sources&#34;&gt;Third-Party Sources&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;API Version&lt;/th&gt;
&lt;th&gt;Maintainer&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/Harwayne/auto-container-source&#34;&gt;Auto Container Source&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of Concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;AutoContainerSource is a controller that allows the Source CRDs &lt;em&gt;without&lt;/em&gt; needing a controller. It notices CRDs with a specific label and starts controlling resources of that type. It utilizes Container Source as underlying infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awscloudwatchsource&#34;&gt;Amazon CloudWatch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Collects metrics from &lt;a href=&#34;https://aws.amazon.com/cloudwatch/&#34;&gt;Amazon CloudWatch&lt;/a&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awscloudwatchlogssource&#34;&gt;Amazon CloudWatch Logs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Subscribes to log events from an &lt;a href=&#34;https://aws.amazon.com/cloudwatch/&#34;&gt;Amazon CloudWatch Logs&lt;/a&gt; stream.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/blob/master/cmd/awscodecommitsource/README.md&#34;&gt;Amazon CodeCommit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Registers for events emitted by an &lt;a href=&#34;https://aws.amazon.com/codecommit/&#34;&gt;Amazon CodeCommit&lt;/a&gt; source code repository.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awscognitoidentitysource/README.md&#34;&gt;Amazon Cognito Identity&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Registers for events from &lt;a href=&#34;https://aws.amazon.com/cognito/&#34;&gt;Amazon Cognito&lt;/a&gt; identity pools.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awscognitouserpoolsource/README.md&#34;&gt;Amazon Cognito User&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Registers for events from &lt;a href=&#34;https://aws.amazon.com/cognito/&#34;&gt;Amazon Cognito&lt;/a&gt; user pools.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/blob/master/cmd/awsdynamodbsource/README.md&#34;&gt;Amazon DynamoDB&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Reads records from an &lt;a href=&#34;https://aws.amazon.com/dynamodb/&#34;&gt;Amazon DynamoDB&lt;/a&gt; stream.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awskinesissource/README.md&#34;&gt;Amazon Kinesis&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Reads records from an &lt;a href=&#34;https://aws.amazon.com/kinesis/&#34;&gt;Amazon Kinesis&lt;/a&gt; stream.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awssnssource/README.md&#34;&gt;Amazon SNS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Subscribes to messages from an &lt;a href=&#34;https://aws.amazon.com/sns/&#34;&gt;Amazon SNS&lt;/a&gt; topic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/aws-event-sources/tree/master/cmd/awssqssource/README.md&#34;&gt;Amazon SQS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Consumes messages from an &lt;a href=&#34;https://aws.amazon.com/sqs/&#34;&gt;Amazon SQS&lt;/a&gt; queue.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/nachocano/bitbucket-source&#34;&gt;BitBucket&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of Concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Registers for events of the specified types on the specified BitBucket organization/repository. Brings those events into Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/google/knative-gcp/blob/main/docs/examples/cloudauditlogssource/README.md&#34;&gt;CloudAuditLogsSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Registers for events of the specified types on the specified &lt;a href=&#34;https://cloud.google.com/logging/docs/audit/&#34;&gt;Google Cloud Audit Logs&lt;/a&gt;. Brings those events into Knative. Refer to the &lt;a href=&#34;../samples/cloud-audit-logs-source&#34;&gt;CloudAuditLogsSource&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/google/knative-gcp/blob/main/docs/examples/cloudpubsubsource/README.md&#34;&gt;CloudPubSubSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://cloud.google.com/pubsub/&#34;&gt;Cloud Pub/Sub&lt;/a&gt; messages into Knative. The CloudPubSubSource fires a new event each time a message is published on a &lt;a href=&#34;https://cloud.google.com/pubsub/&#34;&gt;Google Cloud Platform PubSub topic&lt;/a&gt;. See the &lt;a href=&#34;../samples/cloud-pubsub-source&#34;&gt;CloudPubSubSource&lt;/a&gt; example for more details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/google/knative-gcp/blob/main/docs/examples/cloudschedulersource/README.md&#34;&gt;CloudSchedulerSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Create, update, and delete &lt;a href=&#34;https://cloud.google.com/scheduler/&#34;&gt;Google Cloud Scheduler&lt;/a&gt; Jobs. When those jobs are triggered, receive the event inside Knative. See the &lt;a href=&#34;../samples/cloud-scheduler-source&#34;&gt;CloudSchedulerSource&lt;/a&gt; example for further details.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/google/knative-gcp/blob/main/docs/examples/cloudstoragesource/README.md&#34;&gt;CloudStorageSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Registers for events of the specified types on the specified &lt;a href=&#34;https://cloud.google.com/storage/&#34;&gt;Google Cloud Storage&lt;/a&gt; bucket and optional object prefix. Brings those events into Knative. See the &lt;a href=&#34;../samples/cloud-storage-source&#34;&gt;CloudStorageSource&lt;/a&gt; example.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/tom24d/eventing-dockerhub&#34;&gt;DockerHubSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Retrieves events from &lt;a href=&#34;https://docs.docker.com/docker-hub/webhooks/&#34;&gt;Docker Hub Webhooks&lt;/a&gt; and transforms them into CloudEvents for consumption in Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/vaikas-google/ftp&#34;&gt;FTP / SFTP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Watches for files being uploaded into a FTP/SFTP and generates events for those.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/BrianMMcClain/github-issue-comment-source&#34;&gt;GitHub Issue Comments&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of Concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Polls a specific GitHub issue for new comments.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/Harwayne/auto-container-source/tree/master/heartbeat-source&#34;&gt;Heartbeat&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of Concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Uses an in-memory timer to produce events as the specified interval. Uses AutoContainerSource for underlying infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://konnek.github.io/docs/#/&#34;&gt;Konnek&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Active Development&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Retrieves events from cloud platforms (like AWS and GCP) and transforms them into CloudEvents for consumption in Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/Harwayne/auto-container-source/tree/master/k8s-event-source&#34;&gt;K8s&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Proof of Concept&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Brings Kubernetes cluster events into Knative. Uses AutoContainerSource for underlying infrastructure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative-sandbox/eventing-redis/tree/main/source&#34;&gt;RedisSource&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Brings Redis Stream into Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/knative-sources&#34;&gt;Slack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Subscribes to events from Slack.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/vmware-tanzu/sources-for-knative/blob/main/README.md&#34;&gt;VMware&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Active Development&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Brings &lt;a href=&#34;https://www.vmware.com/products/vsphere.html&#34;&gt;vSphere&lt;/a&gt; events into Knative.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/triggermesh/knative-sources&#34;&gt;Zendesk&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;v1alpha1&lt;/td&gt;
&lt;td&gt;TriggerMesh&lt;/td&gt;
&lt;td&gt;Subscribes to events from Zendesk.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;additional-resources&#34;&gt;Additional resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;For information about creating your own Source type, see the &lt;a href=&#34;../samples/writing-event-source&#34;&gt;tutorial on writing a Source with a Receive Adapter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If your code needs to send events as part of its business logic and doesn&amp;rsquo;t fit the model of a Source, consider &lt;a href=&#34;https://knative.dev/docs/eventing/broker/&#34;&gt;feeding events directly to a Broker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For more information about using &lt;code&gt;kn&lt;/code&gt; Source related commands, see the &lt;a href=&#34;https://github.com/knative/client/blob/main/docs/cmd/kn_source.md&#34;&gt;&lt;code&gt;kn source&lt;/code&gt; reference documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Event registry</title>
<link>https://knative.dev/v0.23-docs/eventing/event-registry/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/event-registry/</guid>
<description>
&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The event registry maintains a catalog of event types that can be consumed
from different brokers. It introduces the EventType custom resource in order to persist the event
type information in the cluster data store.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Read about the &lt;a href=&#34;../broker/&#34;&gt;broker&lt;/a&gt; and &lt;a href=&#34;../broker/triggers/&#34;&gt;trigger&lt;/a&gt; objects.&lt;/li&gt;
&lt;li&gt;Be familiar with the
&lt;a href=&#34;https://github.com/cloudevents/spec/blob/master/spec.md&#34;&gt;CloudEvents spec&lt;/a&gt;,
particularly the
&lt;a href=&#34;https://github.com/cloudevents/spec/blob/master/spec.md#context-attributes&#34;&gt;Context Attributes&lt;/a&gt;
section.&lt;/li&gt;
&lt;li&gt;Be familiar with &lt;a href=&#34;../sources&#34;&gt;event sources&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;discovering-events-with-the-registry&#34;&gt;Discovering events with the registry&lt;/h2&gt;
&lt;p&gt;Using the registry, you can discover different types of events that can be consumed by broker event meshes. The registry is designed for use with
the broker and trigger model, and aims to help you create triggers.&lt;/p&gt;
&lt;p&gt;To see event types in the registry that are available to subscribe to, enter the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get eventtypes -n &amp;lt;namespace&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Below, we show an example output of executing the above command using the
&lt;code&gt;default&lt;/code&gt; namespace in a testing cluster. We will address the question of how
this registry was populated in a later section.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON
dev.knative.source.github.push-34cnb dev.knative.source.github.push https://github.com/knative/eventing default True
dev.knative.source.github.push-44svn dev.knative.source.github.push https://github.com/knative/serving default True
dev.knative.source.github.pullrequest-86jhv dev.knative.source.github.pull_request https://github.com/knative/eventing default True
dev.knative.source.github.pullrequest-97shf dev.knative.source.github.pull_request https://github.com/knative/serving default True
dev.knative.kafka.event-cjvcr dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#news default True
dev.knative.kafka.event-tdt48 dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo default True
google.pubsub.topic.publish-hrxhh google.pubsub.topic.publish //pubsub.googleapis.com/knative/topics/testing dev False BrokerIsNotReady
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This assumes that the event sources emitting the events reference a broker as their sink.&lt;/p&gt;
&lt;p&gt;There are seven different EventType objects in the registry of the
&lt;code&gt;default&lt;/code&gt; namespace.&lt;/p&gt;
&lt;p&gt;Use the following command to see an example of what the YAML for an EventType object looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;kubectl get eventtype dev.knative.source.github.push-34cnb -o yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Omitting irrelevant fields:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1beta1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;EventType&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.source.github.push-34cnb&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;eventing.knative.dev/sourceName&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;github-sample&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.source.github.push&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://github.com/knative/eventing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;schema&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;description&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;status&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;conditions&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;status&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;BrokerExists&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;status&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;BrokerReady&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;status&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;True&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Ready&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;From a consumer standpoint, the fields that matter the most are the &lt;code&gt;spec&lt;/code&gt;
fields as well as the &lt;code&gt;status&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;name&lt;/code&gt; is advisory (i.e., non-authoritative), and we typically generate it
(&lt;code&gt;generateName&lt;/code&gt;) to avoid naming collisions (e.g., two EventTypes listening to
pull requests on two different Github repositories). As &lt;code&gt;name&lt;/code&gt; nor
&lt;code&gt;generateName&lt;/code&gt; are needed for consumers to create Triggers, we defer their
discussion for later on.&lt;/p&gt;
&lt;p&gt;Regarding &lt;code&gt;status&lt;/code&gt;, its main purpose it to tell consumers (or cluster operators)
whether the EventType is ready for consumption or not. That &lt;em&gt;readiness&lt;/em&gt; is based
on the Broker being ready. We can see from the example output that the PubSub
EventType is not ready, as its &lt;code&gt;dev&lt;/code&gt; Broker isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s talk in more details about the &lt;code&gt;spec&lt;/code&gt; fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;type&lt;/code&gt;: is authoritative. This refers to the CloudEvent type as it enters into
the event mesh. It is mandatory. Event consumers can (and in most cases would)
create Triggers filtering on this attribute.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;source&lt;/code&gt;: refers to the CloudEvent source as it enters into the event mesh. It
is mandatory. Event consumers can (and in most cases would) create Triggers
filtering on this attribute.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;schema&lt;/code&gt;: is a valid URI with the EventType schema. It may be a JSON schema, a
protobuf schema, etc. It is optional.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;description&lt;/code&gt;: is a string describing what the EventType is about. It is
optional.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;broker&lt;/code&gt; refers to the Broker that can provide the EventType. It is mandatory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;subscribing-to-events&#34;&gt;Subscribing to events&lt;/h2&gt;
&lt;p&gt;Now that you know what events can be consumed from the Brokers&#39; event meshes,
you can create Triggers to subscribe to particular events.&lt;/p&gt;
&lt;p&gt;Here are a few example Triggers that subscribe to events using exact matching on
&lt;code&gt;type&lt;/code&gt; and/or &lt;code&gt;source&lt;/code&gt;, based on the above registry output:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Subscribes to GitHub &lt;em&gt;pushes&lt;/em&gt; from any source.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;push-trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;attributes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.source.github.push&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subscriber&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;serving.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;push-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As per the registry output above, only two sources exist for that particular
type of event (&lt;em&gt;knative&amp;rsquo;s eventing and serving&lt;/em&gt; repositories). If later on
new sources are registered for GitHub pushes, this trigger will be able to
consume them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subscribes to GitHub &lt;em&gt;pull requests&lt;/em&gt; from &lt;em&gt;knative&amp;rsquo;s eventing&lt;/em&gt; repository.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gh-knative-eventing-pull-trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;attributes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.source.github.pull_request&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;https://github.com/knative/eventing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subscriber&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;serving.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gh-knative-eventing-pull-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subscribes to Kafka messages sent to the &lt;em&gt;knative-demo&lt;/em&gt; topic&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kafka-knative-demo-trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;attributes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.kafka.event&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;/apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subscriber&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;serving.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kafka-knative-demo-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Subscribes to PubSub messages from GCP&amp;rsquo;s &lt;em&gt;knative&lt;/em&gt; project sent to the
&lt;em&gt;testing&lt;/em&gt; topic&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcp-pubsub-knative-testing-trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;attributes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;source&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;//pubsub.googleapis.com/knative/topics/testing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subscriber&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;serving.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;gcp-pubsub-knative-testing-service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that events won&amp;rsquo;t be able to be consumed by this Trigger&amp;rsquo;s subscriber
until the Broker becomes ready.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;populating-the-registry&#34;&gt;Populating the registry&lt;/h2&gt;
&lt;p&gt;Now that we know how to discover events using the registry and how we can
leverage that information to subscribe to events of interest, let&amp;rsquo;s move on to
the next topic: How do we actually populate the registry in the first place?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Manual Registration&lt;/p&gt;
&lt;p&gt;In order to populate the registry, a cluster configurator can manually
register the EventTypes. This means that the configurator can simply apply
EventTypes yaml files, just as with any other Kubernetes resource:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kubectl apply -f &amp;lt;event_type.yaml&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Automatic Registration&lt;/p&gt;
&lt;p&gt;As Manual Registration might be tedious and error-prone, we also support
automatic registration of EventTypes. The creation of the EventTypes is done
upon instantiation of an Event Source. We currently support automatic
registration of EventTypes for the following Event Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CronJobSource&lt;/li&gt;
&lt;li&gt;ApiServerSource&lt;/li&gt;
&lt;li&gt;GithubSource&lt;/li&gt;
&lt;li&gt;GcpPubSubSource&lt;/li&gt;
&lt;li&gt;KafkaSource&lt;/li&gt;
&lt;li&gt;AwsSqsSource&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s look at an example, in particular, the KafkaSource sample we used to
populate the registry in our testing cluster. Below is what the yaml looks
like.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;sources.knative.dev/v1beta1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KafkaSource&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kafka-sample&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;bootstrapServers&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;my-cluster-kafka-bootstrap.kafka:9092&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;topics&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;knative-demo&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;news&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sink&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Broker&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you are interested in more information regarding configuration options of a
KafkaSource, please refer to the
&lt;a href=&#34;../samples/kafka/&#34;&gt;KafKaSource sample&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For this discussion, the relevant information from the yaml above are the
&lt;code&gt;sink&lt;/code&gt; and the &lt;code&gt;topics&lt;/code&gt;. We observe that the &lt;code&gt;sink&lt;/code&gt; is of kind &lt;code&gt;Broker&lt;/code&gt;. We
currently only support automatic creation of EventTypes for Sources instances
that point to Brokers. Regarding &lt;code&gt;topics&lt;/code&gt;, this is what we use to generate the
EventTypes &lt;code&gt;source&lt;/code&gt; field, which is equal to the CloudEvent source attribute.&lt;/p&gt;
&lt;p&gt;When you &lt;code&gt;kubectl apply&lt;/code&gt; this yaml, the KafkaSource &lt;code&gt;kafka-source-sample&lt;/code&gt; will
be instantiated, and two EventTypes will be added to the registry (as there
are two topics). You can see that in the registry example output from the
previous sections.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;../../install/&#34;&gt;Installing Knative&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../samples/&#34;&gt;Knative code samples&lt;/a&gt; is a useful resource to better understand
some of the Event Sources (remember to point them to a Broker if you want
automatic registration of EventTypes in the registry).&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Eventing Flows</title>
<link>https://knative.dev/v0.23-docs/eventing/flows/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/flows/</guid>
<description>
&lt;p&gt;Knative Eventing provides a collection of &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource definitions (CRDs)&lt;/a&gt; that you can use to define event flows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;./sequence&#34;&gt;Sequence&lt;/a&gt; is for defining an in-order list of functions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;./parallel&#34;&gt;Parallel&lt;/a&gt; is for defining a list of branches, each receiving the same CloudEvent.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Channels</title>
<link>https://knative.dev/v0.23-docs/eventing/channels/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/channels/</guid>
<description>
&lt;p&gt;An event might be relevant to many consumers. One way to handle this is to directly tie each consumer
to the producer that creates the event, making a fan-out pattern.&lt;/p&gt;
&lt;p&gt;This fan-out pattern, however, introduces complex problems for the application architecture, such as
retries, timeouts, and persistence. Instead of burdening the producer with these problems, you can
use channels.&lt;/p&gt;
&lt;p&gt;A channel is a Kubernetes &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resource&lt;/a&gt; that defines a single event forwarding and persistence layer.&lt;/p&gt;
&lt;p&gt;Channels function as event delivery mechanisms that can fan out received events, through
subscriptions, to multiple destinations, referred to as sinks. Examples of sinks include brokers and
Knative services.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/channel-workflow.png&#34; width=&#34;80%&#34;&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;There are several kinds of channels, but they all make it possible to deliver events to all relevant
consumers and, importantly, make the events persist.&lt;/p&gt;
&lt;p&gt;When you create a channel, you can choose which kind of channel is most appropriate for your use
case. For development use cases, an in-memory channel might suffice, but for production persistence,
you might need retry and replay capabilities.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Learn about &lt;a href=&#34;channel-types-defaults&#34;&gt;default available channel types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create a &lt;a href=&#34;./create-default-channel&#34;&gt;channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create a &lt;a href=&#34;./subscriptions&#34;&gt;subscription&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Knative Eventing Sugar Controller</title>
<link>https://knative.dev/v0.23-docs/eventing/sugar/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/sugar/</guid>
<description>
&lt;p&gt;Knative Eventing Sugar Controller will react to special labels and annotations
to produce or control eventing resources in a cluster or namespace. This allows
cluster operators and developers to focus on creating fewer resources, and the
underlying eventing infrastructure is created on-demand, and cleaned up when no
longer needed.&lt;/p&gt;
&lt;h2 id=&#34;installing&#34;&gt;Installing&lt;/h2&gt;
&lt;p&gt;The following command installs the Eventing Sugar Controller:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;kubectl apply --filename https://github.com/knative/eventing/releases/download/v0.23.0/eventing-sugar-controller.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;automatic-broker-creation&#34;&gt;Automatic Broker Creation&lt;/h2&gt;
&lt;p&gt;One way to create a Broker is to manually apply a resource to a cluster using
the default settings:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl create -f - &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;apiVersion: eventing.knative.dev/v1
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;kind: Broker
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;metadata:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; name: default
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; namespace: default
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;EOF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There might be cases where automated Broker creation is desirable, such as on
namespace creation, or on Trigger creation. The Sugar controller enables those
use-cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When a Namespace is labeled with &lt;code&gt;eventing.knative.dev/injection=enabled&lt;/code&gt;, the
sugar controller will create a default Broker named &amp;ldquo;default&amp;rdquo; in that
namespace.&lt;/li&gt;
&lt;li&gt;When a Trigger is annotated with &lt;code&gt;eventing.knative.dev/injection=enabled&lt;/code&gt;, the
controller will create a Broker named by that Trigger in the Trigger&amp;rsquo;s
Namespace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When a Broker is deleted and the above labels or annotations are in-use, the
Sugar Controller will automatically recreate a default Broker.&lt;/p&gt;
&lt;h3 id=&#34;namespace-examples&#34;&gt;Namespace Examples&lt;/h3&gt;
&lt;p&gt;Creating a &amp;ldquo;default&amp;rdquo; Broker when creating a Namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl apply -f - &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;apiVersion: v1
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;kind: Namespace
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;metadata:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; name: example
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; labels:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; eventing.knative.dev/injection: enabled
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;EOF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To automatically create a Broker after a namespace exists, label the Namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl label namespace default eventing.knative.dev/injection&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If the Broker named &amp;ldquo;default&amp;rdquo; already exists in the Namespace, the Sugar
Controller will do nothing.&lt;/p&gt;
&lt;h3 id=&#34;trigger-examples&#34;&gt;Trigger Examples&lt;/h3&gt;
&lt;p&gt;Create a Broker named by a Trigger (&lt;code&gt;spec.broker&lt;/code&gt;) in the Trigger&amp;rsquo;s Namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl apply -f - &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;apiVersion: eventing.knative.dev/v1
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;kind: Trigger
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;metadata:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; name: hello-sugar
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; namespace: hello
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; annotations:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; eventing.knative.dev/injection: enabled
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;spec:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; broker: sugar
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; subscriber:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; ref:
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; apiVersion: v1
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; kind: Service
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt; name: event-display
&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;EOF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: If the named Broker already exists, the Sugar controller will do
nothing, and the Trigger will not own the existing Broker.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This will make a Broker called &amp;ldquo;sugar&amp;rdquo; in the Namespace &amp;ldquo;hello&amp;rdquo;, and attempt to
send events to the &amp;ldquo;event-display&amp;rdquo; service.&lt;/p&gt;
&lt;p&gt;If the Broker of the given name already exists in the Namespace, the Sugar
Controller will do nothing.&lt;/p&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Event delivery</title>
<link>https://knative.dev/v0.23-docs/eventing/event-delivery/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/event-delivery/</guid>
<description>
&lt;p&gt;You can configure event delivery parameters for Knative Eventing components that are applied in cases where an event fails to be delivered&lt;/p&gt;
&lt;h2 id=&#34;configuring-subscription-event-delivery&#34;&gt;Configuring subscription event delivery&lt;/h2&gt;
&lt;p&gt;You can configure how events are delivered for each subscription by adding a &lt;code&gt;delivery&lt;/code&gt; spec to the &lt;code&gt;Subscription&lt;/code&gt; object, as shown in the following example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;messaging.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Subscription&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;example-subscription&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;example-namespace&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;delivery&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;deadLetterSink&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;serving.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Service&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;example-sink&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;backoffDelay&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;duration&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;backoffPolicy&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;policy-type&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;retry&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;&amp;lt;integer&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;deadLetterSink&lt;/code&gt; spec contains configuration settings to enable using a dead letter sink. This tells the subscription what happens to events that cannot be delivered to the subscriber. When this is configured, events that fail to be delivered are sent to the dead letter sink destination. The destination can be a Knative service or a URI. In the example, the destination is a &lt;code&gt;Service&lt;/code&gt; object, or Knative service, named &lt;code&gt;example-sink&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;backoffDelay&lt;/code&gt; delivery parameter specifies the time delay before an event delivery retry is attempted after a failure. The duration of the &lt;code&gt;backoffDelay&lt;/code&gt; parameter is specified using the ISO 8601 format. For example, &lt;code&gt;PT1S&lt;/code&gt; specifies a 1 second delay.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;backoffPolicy&lt;/code&gt; delivery parameter can be used to specify the retry back off policy. The policy can be specified as either &lt;code&gt;linear&lt;/code&gt; or &lt;code&gt;exponential&lt;/code&gt;. When using the &lt;code&gt;linear&lt;/code&gt; back off policy, the back off delay is the time interval specified between retries. When using the &lt;code&gt;exponential&lt;/code&gt; back off policy, the back off delay is equal to &lt;code&gt;backoffDelay*2^&amp;lt;numberOfRetries&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;retry&lt;/code&gt; specifies the number of times that event delivery is retried before the event is sent to the dead letter sink.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;broker-event-delivery&#34;&gt;Broker event delivery&lt;/h2&gt;
&lt;p&gt;See the &lt;a href=&#34;../broker/broker-event-delivery&#34;&gt;broker&lt;/a&gt; documentation.&lt;/p&gt;
&lt;h2 id=&#34;channel-event-delivery&#34;&gt;Channel event delivery&lt;/h2&gt;
&lt;p&gt;Failed events may, depending on the specific Channel implementation in use, be
enhanced with extension attributes prior to forwarding to the&lt;code&gt;deadLetterSink&lt;/code&gt;.
These extension attributes are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;knativeerrorcode&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type:&lt;/strong&gt; Int&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description:&lt;/strong&gt; The HTTP Response &lt;strong&gt;StatusCode&lt;/strong&gt; from the final event
dispatch attempt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; Should always be present as every HTTP Response contains
a &lt;strong&gt;StatusCode&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;500&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;hellip;any HTTP StatusCode&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;knativeerrordata&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type:&lt;/strong&gt; String&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Description:&lt;/strong&gt; The HTTP Response &lt;strong&gt;Body&lt;/strong&gt; from the final event dispatch
attempt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Constraints:&lt;/strong&gt; Will be empty if the HTTP Response &lt;strong&gt;Body&lt;/strong&gt; was empty,
and might be truncated if the length is excessive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Examples:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&amp;lsquo;Internal Server Error: Failed to process event.&amp;rsquo;&lt;/li&gt;
&lt;li&gt;&amp;lsquo;{&amp;ldquo;key&amp;rdquo;: &amp;ldquo;value&amp;rdquo;}&amp;rsquo;&lt;/li&gt;
&lt;li&gt;&amp;hellip;any HTTP Response Body&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;channel-support&#34;&gt;Channel Support&lt;/h3&gt;
&lt;p&gt;The table below summarizes what delivery parameters are supported for each channel implementation.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Channel Type&lt;/th&gt;
&lt;th&gt;Supported Delivery Parameters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GCP PubSub&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-Memory&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deadLetterSink&lt;/code&gt;, &lt;code&gt;retry&lt;/code&gt;, &lt;code&gt;backoffPolicy&lt;/code&gt;, &lt;code&gt;backoffDelay&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kafka&lt;/td&gt;
&lt;td&gt;&lt;code&gt;deadLetterSink&lt;/code&gt;, &lt;code&gt;retry&lt;/code&gt;, &lt;code&gt;backoffPolicy&lt;/code&gt;, &lt;code&gt;backoffDelay&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Natss&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Brokers</title>
<link>https://knative.dev/v0.23-docs/eventing/broker/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/broker/</guid>
<description>
&lt;p&gt;Brokers are Kubernetes &lt;a href=&#34;https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/&#34;&gt;custom resources&lt;/a&gt; that define an event mesh for collecting a pool of &lt;a href=&#34;https://cloudevents.io/&#34;&gt;CloudEvents&lt;/a&gt;. Brokers provide a discoverable endpoint, &lt;code&gt;status.address&lt;/code&gt;, for event ingress, and triggers for event delivery. Event producers can send events to a broker by POSTing the event to the &lt;code&gt;status.address.url&lt;/code&gt; of the broker.&lt;/p&gt;
&lt;p&gt;Event delivery mechanics are an implementation detail that depend on the configured &lt;a href=&#34;./configmaps/broker-configmaps/#broker-class-options&#34;&gt;broker class&lt;/a&gt;. Using brokers and triggers abstracts the details of event routing from the event producer and event consumer.&lt;/p&gt;
&lt;img src=&#34;images/broker-workflow.svg&#34; width=&#34;70%&#34;&gt;
&lt;p&gt;After an event has entered a broker, it can be forwarded to subscribers by using triggers. Triggers allow events to be filtered by attributes, so that events with particular attributes can be sent to subscribers that have registered interest in events with those attributes.&lt;/p&gt;
&lt;p&gt;A subscriber can be any URL or &lt;em&gt;Addressable&lt;/em&gt; resource. Subscribers can also reply to an active request from the broker, and can respond with a new CloudEvent that will be sent back into the broker.&lt;/p&gt;
&lt;p&gt;For most use cases, a single broker per namespace is sufficient, but
there are several use cases where multiple brokers can simplify
architecture. For example, separate brokers for events containing Personally
Identifiable Information (PII) and non-PII events can simplify audit and access
control rules.&lt;/p&gt;
&lt;h2 id=&#34;broker-types&#34;&gt;Broker types&lt;/h2&gt;
&lt;p&gt;The following broker types are available for use with Knative Eventing.&lt;/p&gt;
&lt;h3 id=&#34;multi-tenant-channel-based-broker&#34;&gt;Multi-tenant channel-based broker&lt;/h3&gt;
&lt;p&gt;Knative Eventing provides a multi-tenant (MT) channel-based broker implementation that uses channels for event routing.&lt;/p&gt;
&lt;p&gt;Before you can use the MT channel-based broker, you must install a &lt;a href=&#34;../channels/channel-types-defaults&#34;&gt;channel implementation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;alternative-broker-implementations&#34;&gt;Alternative broker implementations&lt;/h3&gt;
&lt;p&gt;In the Knative Eventing ecosystem, alternative broker implementations are welcome as long as they respect the &lt;a href=&#34;https://github.com/knative/specs/blob/main/specs/eventing/broker.md&#34;&gt;broker specifications&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following is a list of brokers provided by the community or vendors:&lt;/p&gt;
&lt;h4 id=&#34;gcp-broker&#34;&gt;GCP broker&lt;/h4&gt;
&lt;p&gt;The GCP broker is optimized for running in GCP. For more details, refer to the &lt;a href=&#34;https://github.com/google/knative-gcp/blob/master/docs/install/install-gcp-broker.md&#34;&gt;documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;apache-kafka-broker&#34;&gt;Apache Kafka broker&lt;/h4&gt;
&lt;p&gt;For information about the Apache Kafka broker, see &lt;a href=&#34;./kafka-broker&#34;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;next-steps&#34;&gt;Next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create a &lt;a href=&#34;./create-mtbroker&#34;&gt;MT channel-based broker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Configure &lt;a href=&#34;./configmaps/broker-configmaps&#34;&gt;default broker ConfigMap settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;View the &lt;a href=&#34;https://github.com/knative/specs/blob/main/specs/eventing/broker.md&#34;&gt;broker specifications&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Sink</title>
<link>https://knative.dev/v0.23-docs/eventing/sink/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/sink/</guid>
<description>
&lt;p&gt;A sink is an Addressable resource that acts as a link
between the Eventing mesh and an entity or system.&lt;/p&gt;
&lt;p&gt;We can connect any source to a sink, such as &lt;code&gt;PingSource&lt;/code&gt; and &lt;code&gt;KafkaSink&lt;/code&gt; objects:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;sources.knative.dev/v1beta1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;PingSource&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;test-ping-source&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;schedule&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;*/1 * * * *&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;jsonData&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{&amp;#34;message&amp;#34;: &amp;#34;Hello world!&amp;#34;}&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sink&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KafkaSink&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-kafka-sink&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We can connect a &lt;code&gt;Trigger&lt;/code&gt; object to a sink, so that we can filter events, before sending them to a sink:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-service-trigger&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;spec&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;broker&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;default&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;filter&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;attributes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;dev.knative.foo.bar&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;myextension&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-extension-value&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;subscriber&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ref&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev/v1alpha1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;KafkaSink&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;my-kafka-sink&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;setting-up-a-custom-resource-to-be-used-as-a-sink&#34;&gt;Setting up a Custom Resource to be used as a sink&lt;/h2&gt;
&lt;p&gt;To allow a Custom Resource to act as a sink for events, there are two things needed:&lt;/p&gt;
&lt;h4 id=&#34;1-make-the-resource-addressable&#34;&gt;1. Make the resource Addressable&lt;/h4&gt;
&lt;p&gt;To make a Custom Resource Addressable, it needs to contain a &lt;code&gt;status.address.url&lt;/code&gt;. More information about &lt;a href=&#34;https://github.com/knative/specs/blob/main/specs/eventing/interfaces.md#addressable&#34;&gt;Addressable resources&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;2-create-an-addressable-resolver-clusterrole&#34;&gt;2. Create an addressable-resolver ClusterRole&lt;/h4&gt;
&lt;p&gt;An addressable-resolver ClusterRole is needed in order to obtain the necessary RBAC rules for the sink to receive events.&lt;/p&gt;
&lt;p&gt;For example, we can create a &lt;code&gt;kafkasinks-addressable-resolver&lt;/code&gt; ClusterRole to allow &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, and &lt;code&gt;watch&lt;/code&gt; access to &lt;code&gt;kafkasinks&lt;/code&gt; and &lt;code&gt;kafkasinks/status&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ClusterRole&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;rbac.authorization.k8s.io/v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kafkasinks-addressable-resolver&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;labels&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kafka.eventing.knative.dev/release&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;devel&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;duck.knative.dev/addressable&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Do not use this role directly. These rules will be added to the &amp;#34;addressable-resolver&amp;#34; role.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;rules&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiGroups&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;eventing.knative.dev&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;resources&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;kafkasinks&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;kafkasinks/status&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;verbs&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;get&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;list&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;watch&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;knative-sinks&#34;&gt;Knative Sinks&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Maintainer&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;./kafka-sink&#34;&gt;KafkaSink&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Send events to a Kafka topic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&#34;https://github.com/knative-sandbox/eventing-redis/tree/main/sink&#34;&gt;RedisSink&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Knative&lt;/td&gt;
&lt;td&gt;Send events to a Redis Stream&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Debugging Knative Eventing</title>
<link>https://knative.dev/v0.23-docs/eventing/debugging/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/debugging/</guid>
<description>
&lt;p&gt;This is an evolving document on how to debug a non-working Knative Eventing
setup.&lt;/p&gt;
&lt;h2 id=&#34;audience&#34;&gt;Audience&lt;/h2&gt;
&lt;p&gt;This document is intended for people that are familiar with the object model of
&lt;a href=&#34;../&#34;&gt;Knative Eventing&lt;/a&gt;. You don&amp;rsquo;t need to be an expert, but do need to
know roughly how things fit together.&lt;/p&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Setup &lt;a href=&#34;../&#34;&gt;Knative Eventing and an Eventing-contrib resource&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;
&lt;p&gt;This guide uses an example consisting of an event source that sends events to a
function.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;ExampleModel.png&#34; alt=&#34;src -&gt; chan -&gt; sub -&gt; svc -&gt; fn&#34;&gt;&lt;/p&gt;
&lt;p&gt;See &lt;a href=&#34;example.yaml&#34;&gt;example.yaml&lt;/a&gt; for the entire YAML. For any commands in this
guide to work, you must apply &lt;a href=&#34;example.yaml&#34;&gt;example.yaml&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl apply --filename example.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;triggering-events&#34;&gt;Triggering Events&lt;/h2&gt;
&lt;p&gt;Knative events will occur whenever a Kubernetes
&lt;a href=&#34;https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#event-v1-core&#34;&gt;&lt;code&gt;Event&lt;/code&gt;&lt;/a&gt;
occurs in the &lt;code&gt;knative-debug&lt;/code&gt; namespace. We can cause this to occur with the
following commands:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug run to-be-deleted --image&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;image-that-doesnt-exist --restart&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;Never
&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 5 seconds is arbitrary. We want K8s to notice that the Pod needs to be scheduled and generate at least one event.&lt;/span&gt;
sleep &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;5&lt;/span&gt;
kubectl --namespace knative-debug delete pod to-be-deleted
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then we can see the Kubernetes &lt;code&gt;Event&lt;/code&gt;s (note that these are not Knative
events!):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get events
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should produce output along the lines of:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;LAST SEEN FIRST SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
20s 20s &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt; to-be-deleted.157aadb9f376fc4e Pod Normal Scheduled default-scheduler Successfully assigned knative-debug/to-be-deleted to gke-kn24-default-pool-c12ac83b-pjf2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;where-are-my-events&#34;&gt;Where are my events?&lt;/h2&gt;
&lt;p&gt;You&amp;rsquo;ve applied &lt;a href=&#34;example.yaml&#34;&gt;example.yaml&lt;/a&gt; and you are inspecting &lt;code&gt;fn&lt;/code&gt;&amp;rsquo;s logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug logs -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;fn -c user-container
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But you don&amp;rsquo;t see any events arrive. Where is the problem?&lt;/p&gt;
&lt;h3 id=&#34;control-plane&#34;&gt;Control Plane&lt;/h3&gt;
&lt;p&gt;We will first check the control plane, to ensure everything should be working
properly.&lt;/p&gt;
&lt;h4 id=&#34;resources&#34;&gt;Resources&lt;/h4&gt;
&lt;p&gt;The first thing to check are all the created resources, do their statuses
contain &lt;code&gt;ready&lt;/code&gt; true?&lt;/p&gt;
&lt;p&gt;We will attempt to determine why from the most basic pieces out:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;fn&lt;/code&gt; - The &lt;code&gt;Deployment&lt;/code&gt; has no dependencies inside Knative.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svc&lt;/code&gt; - The &lt;code&gt;Service&lt;/code&gt; has no dependencies inside Knative.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chan&lt;/code&gt; - The &lt;code&gt;Channel&lt;/code&gt; depends on its backing &lt;code&gt;channel implementation&lt;/code&gt; and
somewhat depends on &lt;code&gt;sub&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src&lt;/code&gt; - The &lt;code&gt;Source&lt;/code&gt; depends on &lt;code&gt;chan&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sub&lt;/code&gt; - The &lt;code&gt;Subscription&lt;/code&gt; depends on both &lt;code&gt;chan&lt;/code&gt; and &lt;code&gt;svc&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&#34;fn&#34;&gt;&lt;code&gt;fn&lt;/code&gt;&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get deployment fn -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.availableReplicas}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We want to see &lt;code&gt;1&lt;/code&gt;. If you don&amp;rsquo;t, then you need to debug the &lt;code&gt;Deployment&lt;/code&gt;. Is
there anything obviously wrong mentioned in the &lt;code&gt;status&lt;/code&gt;?&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get deployment fn --output yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If it is not obvious what is wrong, then you need to debug the &lt;code&gt;Deployment&lt;/code&gt;,
which is out of scope of this document.&lt;/p&gt;
&lt;p&gt;Verify that the &lt;code&gt;Pod&lt;/code&gt; is &lt;code&gt;Ready&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get pod -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;fn -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.items[*].status.conditions[?(@.type == &amp;#34;Ready&amp;#34;)].status}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should return &lt;code&gt;True&lt;/code&gt;. If it doesn&amp;rsquo;t, then try to debug the &lt;code&gt;Deployment&lt;/code&gt;
using the
&lt;a href=&#34;https://kubernetes.io/docs/tasks/debug-application-cluster/debug-application-introspection/&#34;&gt;Kubernetes Application Debugging&lt;/a&gt;
guide.&lt;/p&gt;
&lt;h5 id=&#34;svc&#34;&gt;&lt;code&gt;svc&lt;/code&gt;&lt;/h5&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get service svc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We just want to ensure this exists and has the correct name. If it doesn&amp;rsquo;t
exist, then you probably need to re-apply &lt;a href=&#34;example.yaml&#34;&gt;example.yaml&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Verify it points at the expected pod.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#000&#34;&gt;svcLabels&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;$(&lt;/span&gt;kubectl --namespace knative-debug get service svc -o go-template&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{{range $k, $v := .spec.selector}}{{ $k }}={{ $v }},{{ end }}&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;|&lt;/span&gt; sed &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;s/.$//&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;)&lt;/span&gt;
kubectl --namespace knative-debug get pods -l &lt;span style=&#34;color:#000&#34;&gt;$svcLabels&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should return a single Pod, which if you inspect is the one generated by
&lt;code&gt;fn&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&#34;chan&#34;&gt;&lt;code&gt;chan&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;chan&lt;/code&gt; uses the
&lt;a href=&#34;https://github.com/knative/eventing/tree/release-0.23/config/channels/in-memory-channel&#34;&gt;&lt;code&gt;in-memory-channel&lt;/code&gt;&lt;/a&gt;.
This is a very basic channel and has few
failure modes that will be exhibited in &lt;code&gt;chan&lt;/code&gt;&amp;rsquo;s &lt;code&gt;status&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get channel.messaging.knative.dev chan -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.conditions[?(@.type == &amp;#34;Ready&amp;#34;)].status}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should return &lt;code&gt;True&lt;/code&gt;. If it doesn&amp;rsquo;t, get the full resource:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get channel.messaging.knative.dev chan --output yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If &lt;code&gt;status&lt;/code&gt; is completely missing, it implies that something is wrong with the
&lt;code&gt;in-memory-channel&lt;/code&gt; controller. See &lt;a href=&#34;#channel-controller&#34;&gt;Channel Controller&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next verify that &lt;code&gt;chan&lt;/code&gt; is addressable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get channel.messaging.knative.dev chan -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.address.hostname}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should return a URI, likely ending in &amp;lsquo;.cluster.local&amp;rsquo;. If it doesn&amp;rsquo;t, then
it implies that something went wrong during reconciliation. See
&lt;a href=&#34;#channel-controller&#34;&gt;Channel Controller&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We will verify that the two resources that the &lt;code&gt;chan&lt;/code&gt; creates exist and are
&lt;code&gt;Ready&lt;/code&gt;.&lt;/p&gt;
&lt;h6 id=&#34;service&#34;&gt;&lt;code&gt;Service&lt;/code&gt;&lt;/h6&gt;
&lt;p&gt;&lt;code&gt;chan&lt;/code&gt; creates a K8s &lt;code&gt;Service&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get service -l messaging.knative.dev/role&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;in-memory-channel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It&amp;rsquo;s spec is completely unimportant, as Istio will ignore it. It just needs to
exist so that &lt;code&gt;src&lt;/code&gt; can send events to it. If it doesn&amp;rsquo;t exist, it implies that
something went wrong during &lt;code&gt;chan&lt;/code&gt; reconciliation. See
&lt;a href=&#34;#channel-controller&#34;&gt;Channel Controller&lt;/a&gt;.&lt;/p&gt;
&lt;h5 id=&#34;src&#34;&gt;&lt;code&gt;src&lt;/code&gt;&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;src&lt;/code&gt; is a &lt;a href=&#34;../sources/apiserversource&#34;&gt;&lt;code&gt;ApiServerSource&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First we will verify that &lt;code&gt;src&lt;/code&gt; is writing to &lt;code&gt;chan&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get apiserversource src -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.spec.sink}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which should return
&lt;code&gt;map[apiVersion:messaging.knative.dev/v1 kind:Channel name:chan]&lt;/code&gt;. If it
doesn&amp;rsquo;t, then &lt;code&gt;src&lt;/code&gt; was setup incorrectly and its &lt;code&gt;spec&lt;/code&gt; needs to be fixed.
Fixing should be as simple as updating its &lt;code&gt;spec&lt;/code&gt; to have the correct &lt;code&gt;sink&lt;/code&gt;
(see &lt;a href=&#34;example.yaml&#34;&gt;example.yaml&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Now that we know &lt;code&gt;src&lt;/code&gt; is sending to &lt;code&gt;chan&lt;/code&gt;, let&amp;rsquo;s verify that it is &lt;code&gt;Ready&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get apiserversource src -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.conditions[?(.type == &amp;#34;Ready&amp;#34;)].status}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;sub&#34;&gt;&lt;code&gt;sub&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;sub&lt;/code&gt; is a &lt;code&gt;Subscription&lt;/code&gt; from &lt;code&gt;chan&lt;/code&gt; to &lt;code&gt;fn&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Verify that &lt;code&gt;sub&lt;/code&gt; is &lt;code&gt;Ready&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get subscription sub -o &lt;span style=&#34;color:#000&#34;&gt;jsonpath&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;{.status.conditions[?(.type == &amp;#34;Ready&amp;#34;)].status}&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should return &lt;code&gt;True&lt;/code&gt;. If it doesn&amp;rsquo;t then, look at all the status entries.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get subscription sub --output yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;controllers&#34;&gt;Controllers&lt;/h4&gt;
&lt;p&gt;Each of the resources has a Controller that is watching it. As of today, they
tend to do a poor job of writing failure status messages and events, so we need
to look at the Controller&amp;rsquo;s logs.&lt;/p&gt;
&lt;h5 id=&#34;deployment-controller&#34;&gt;Deployment Controller&lt;/h5&gt;
&lt;p&gt;The Kubernetes Deployment Controller, controlling &lt;code&gt;fn&lt;/code&gt;, is out of scope for this
document.&lt;/p&gt;
&lt;h5 id=&#34;service-controller&#34;&gt;Service Controller&lt;/h5&gt;
&lt;p&gt;The Kubernetes Service Controller, controlling &lt;code&gt;svc&lt;/code&gt;, is out of scope for this
document.&lt;/p&gt;
&lt;h5 id=&#34;channel-controller&#34;&gt;Channel Controller&lt;/h5&gt;
&lt;p&gt;There is not a single &lt;code&gt;Channel&lt;/code&gt; Controller. Instead, there is one
Controller for each Channel CRD. &lt;code&gt;chan&lt;/code&gt; uses the
&lt;code&gt;InMemoryChannel&lt;/code&gt; &lt;code&gt;Channel CRD&lt;/code&gt;, whose Controller is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing get pod -l messaging.knative.dev/channel&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;in-memory-channel,messaging.knative.dev/role&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;controller --output yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;See its logs with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing logs -l messaging.knative.dev/channel&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;in-memory-channel,messaging.knative.dev/role&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pay particular attention to any lines that have a logging level of &lt;code&gt;warning&lt;/code&gt; or
&lt;code&gt;error&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&#34;source-controller&#34;&gt;Source Controller&lt;/h5&gt;
&lt;p&gt;Each Source will have its own Controller. &lt;code&gt;src&lt;/code&gt; is a &lt;code&gt;ApiServerSource&lt;/code&gt;, so
its Controller is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing get pod -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;sources-controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is actually a single binary that runs multiple Source Controllers,
importantly including &lt;a href=&#34;#apiserversource-controller&#34;&gt;ApiServerSource Controller&lt;/a&gt;.&lt;/p&gt;
&lt;h6 id=&#34;apiserversource-controller&#34;&gt;ApiServerSource Controller&lt;/h6&gt;
&lt;p&gt;The &lt;code&gt;ApiServerSource&lt;/code&gt; Controller is run in the same binary as some other Source
Controllers from Eventing. It is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug get pod -l eventing.knative.dev/sourceName&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;src,eventing.knative.dev/source&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;apiserver-source-controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;View its logs with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-debug logs -l eventing.knative.dev/sourceName&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;src,eventing.knative.dev/source&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;apiserver-source-controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pay particular attention to any lines that have a logging level of &lt;code&gt;warning&lt;/code&gt; or
&lt;code&gt;error&lt;/code&gt;.&lt;/p&gt;
&lt;h5 id=&#34;subscription-controller&#34;&gt;Subscription Controller&lt;/h5&gt;
&lt;p&gt;The &lt;code&gt;Subscription&lt;/code&gt; Controller controls &lt;code&gt;sub&lt;/code&gt;. It attempts to resolve the
addresses that a &lt;code&gt;Channel&lt;/code&gt; should send events to, and once resolved, inject
those into the &lt;code&gt;Channel&lt;/code&gt;&amp;rsquo;s &lt;code&gt;spec.subscribable&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing get pod -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;eventing-controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;View its logs with:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing logs -l &lt;span style=&#34;color:#000&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;eventing-controller
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pay particular attention to any lines that have a logging level of &lt;code&gt;warning&lt;/code&gt; or
&lt;code&gt;error&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;data-plane&#34;&gt;Data Plane&lt;/h3&gt;
&lt;p&gt;The entire &lt;a href=&#34;#control-plane&#34;&gt;Control Plane&lt;/a&gt; looks healthy, but we&amp;rsquo;re still not
getting any events. Now we need to investigate the data plane.&lt;/p&gt;
&lt;p&gt;The Knative event takes the following path:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Event is generated by &lt;code&gt;src&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In this case, it is caused by having a Kubernetes &lt;code&gt;Event&lt;/code&gt; trigger it, but
as far as Knative is concerned, the &lt;code&gt;Source&lt;/code&gt; is generating the event denovo
(from nothing).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;src&lt;/code&gt; is POSTing the event to &lt;code&gt;chan&lt;/code&gt;&amp;rsquo;s address,
&lt;code&gt;http://chan-kn-channel.knative-debug.svc.cluster.local&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Channel Dispatcher receives the request and introspects the Host header
to determine which &lt;code&gt;Channel&lt;/code&gt; it corresponds to. It sees that it corresponds
to &lt;code&gt;knative-debug/chan&lt;/code&gt; so forwards the request to the subscribers defined in
&lt;code&gt;sub&lt;/code&gt;, in particular &lt;code&gt;svc&lt;/code&gt;, which is backed by &lt;code&gt;fn&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fn&lt;/code&gt; receives the request and logs it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We will investigate components in the order in which events should travel.&lt;/p&gt;
&lt;h4 id=&#34;channel-dispatcher&#34;&gt;Channel Dispatcher&lt;/h4&gt;
&lt;p&gt;The Channel Dispatcher is the component that receives POSTs pushing events into
&lt;code&gt;Channel&lt;/code&gt;s and then POSTs to subscribers of those &lt;code&gt;Channel&lt;/code&gt;s when an event is
received. For the &lt;code&gt;in-memory-channel&lt;/code&gt; used in this example, there is a single
binary that handles both the receiving and dispatching sides for all
&lt;code&gt;in-memory-channel&lt;/code&gt; &lt;code&gt;Channel&lt;/code&gt;s.&lt;/p&gt;
&lt;p&gt;First we will inspect the Dispatcher&amp;rsquo;s logs to see if it is anything obvious:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl --namespace knative-eventing logs -l messaging.knative.dev/channel&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;in-memory-channel,messaging.knative.dev/role&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;dispatcher -c dispatcher
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ideally we will see lines like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T13:50:55.424Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_receiver.go:147&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Request mapped to channel: knative-debug/chan-kn-channel&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T13:50:55.425Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_dispatcher.go:112&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Dispatching message to http://svc.knative-debug.svc.cluster.local/&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T13:50:55.981Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_receiver.go:140&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Received request for chan-kn-channel.knative-debug.svc.cluster.local&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Which shows that the request is being received and then sent to &lt;code&gt;svc&lt;/code&gt;, which is
returning a 2XX response code (likely 200, 202, or 204).&lt;/p&gt;
&lt;p&gt;However if we see something like:&lt;/p&gt;
&lt;!--
NOTE: This error has been produced by settings spec.ports[0].port to 8081
kubectl patch -n knative-debug svc svc -p &#39;{&#34;spec&#34;:{&#34;ports&#34;: [{&#34;port&#34;: 8081, &#34;targetPort&#34;:8080}]}}&#39; --type=&#39;merge&#39;
--&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T16:10:16.859Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_receiver.go:140&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Received request for chan-kn-channel.knative-debug.svc.cluster.local&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T16:10:16.859Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_receiver.go:147&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Request mapped to channel: knative-debug/chan-kn-channel&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T16:10:16.859Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;provisioners/message_dispatcher.go:112&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Dispatching message to http://svc.knative-debug.svc.cluster.local/&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;level&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;2019-08-16T16:10:38.169Z&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;logger&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;inmemorychannel-dispatcher.in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;caller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;fanout/fanout_handler.go:121&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Fanout had an error&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/controller&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;in-memory-channel-dispatcher&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;Unable to complete request Post http://svc.knative-debug.svc.cluster.local/: dial tcp 10.4.44.156:80: i/o timeout&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;stacktrace&amp;#34;&lt;/span&gt;:&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;knative.dev/eventing/pkg/provisioners/fanout.(*Handler).dispatch\n\t/Users/xxxxxx/go/src/knative.dev/eventing/pkg/provisioners/fanout/fanout_handler.go:121\nknative.dev/eventing/pkg/provisioners/fanout.createReceiverFunction.func1.1\n\t/Users/i512777/go/src/knative.dev/eventing/pkg/provisioners/fanout/fanout_handler.go:95&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then we know there was a problem posting to
&lt;code&gt;http://svc.knative-debug.svc.cluster.local/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;TODO Finish this section. Especially after the Channel Dispatcher emits K8s
events about failures.&lt;/p&gt;
&lt;h4 id=&#34;fn-1&#34;&gt;&lt;code&gt;fn&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;TODO Fill in this section.&lt;/p&gt;
&lt;h1 id=&#34;todo-finish-the-guide&#34;&gt;TODO Finish the guide.&lt;/h1&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Accessing CloudEvent traces</title>
<link>https://knative.dev/v0.23-docs/eventing/accessing-traces/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/accessing-traces/</guid>
<description>
&lt;p&gt;Depending on the request tracing tool that you have installed on your Knative
Eventing cluster, see the corresponding section for details about how to
visualize and trace your requests.&lt;/p&gt;
&lt;h2 id=&#34;before-you-begin&#34;&gt;Before you begin&lt;/h2&gt;
&lt;p&gt;You must have a Knative cluster running with the Eventing component installed. &lt;a href=&#34;../../install/&#34;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;configuring-tracing&#34;&gt;Configuring tracing&lt;/h2&gt;
&lt;p&gt;With the exception of importers, the Knative Eventing tracing is configured through the
&lt;code&gt;config-tracing&lt;/code&gt; ConfigMap in the &lt;code&gt;knative-eventing&lt;/code&gt; namespace.&lt;/p&gt;
&lt;p&gt;Most importers do &lt;em&gt;not&lt;/em&gt; use the ConfigMap and instead, use a static 1% sampling rate.&lt;/p&gt;
&lt;p&gt;You can use the &lt;code&gt;config-tracing&lt;/code&gt; ConfigMap to configure the following Eventing components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Brokers&lt;/li&gt;
&lt;li&gt;Triggers&lt;/li&gt;
&lt;li&gt;InMemoryChannel&lt;/li&gt;
&lt;li&gt;ApiServerSource&lt;/li&gt;
&lt;li&gt;PingSource&lt;/li&gt;
&lt;li&gt;GitlabSource&lt;/li&gt;
&lt;li&gt;KafkaSource&lt;/li&gt;
&lt;li&gt;PrometheusSource&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following example &lt;code&gt;config-tracing&lt;/code&gt; ConfigMap samples 10% of all CloudEvents:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;apiVersion&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;kind&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ConfigMap&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;metadata&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;config-tracing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;namespace&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;knative-eventing&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;zipkin&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;zipkin-endpoint&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;http://zipkin.istio-system.svc.cluster.local:9411/api/v2/spans&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;sample-rate&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;0.1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8;text-decoration:underline&#34;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;configuration-options&#34;&gt;Configuration options&lt;/h3&gt;
&lt;p&gt;You can configure your &lt;code&gt;config-tracing&lt;/code&gt; with following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;backend&lt;/code&gt;: Valid values are &lt;code&gt;zipkin&lt;/code&gt;, &lt;code&gt;stackdriver&lt;/code&gt;, or &lt;code&gt;none&lt;/code&gt;. The default is &lt;code&gt;none&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;zipkin-endpoint&lt;/code&gt;: Specifies the URL to the zipkin collector where you want to send the traces.
Must be set if backend is set to &lt;code&gt;zipkin&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stackdriver-project-id&lt;/code&gt;: Specifies the GCP project ID into which the Stackdriver traces are written.
You must specify the &lt;code&gt;backend&lt;/code&gt; as &lt;code&gt;stackdriver&lt;/code&gt;. If &lt;code&gt;backend&lt;/code&gt;is unspecified, the GCP project ID is read
from GCP metadata when running on GCP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sample-rate&lt;/code&gt;: Specifies the sampling rate. Valid values are decimals from &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt;
(interpreted as a float64), which indicate the probability that any given request is sampled.
An example value is &lt;code&gt;0.5&lt;/code&gt;, which gives each request a 50% sampling probablity.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;debug&lt;/code&gt;: Enables debugging. Valid values are &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;. Defaults to &lt;code&gt;false&lt;/code&gt; when not specified.
Set to &lt;code&gt;true&lt;/code&gt; to enable debug mode, which forces the &lt;code&gt;sample-rate&lt;/code&gt; to &lt;code&gt;1.0&lt;/code&gt; and sends all spans to
the server.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;viewing-your-config-tracing-configmap&#34;&gt;Viewing your &lt;code&gt;config-tracing&lt;/code&gt; ConfigMap&lt;/h3&gt;
&lt;p&gt;To view your current configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl -n knative-eventing get configmap config-tracing -oyaml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;editing-and-deploying-your-config-tracing-configmap&#34;&gt;Editing and deploying your &lt;code&gt;config-tracing&lt;/code&gt; ConfigMap&lt;/h3&gt;
&lt;p&gt;To edit and then immediately deploy changes to your ConfigMap, run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kubectl -n knative-eventing edit configmap config-tracing
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;accessing-traces-in-eventing&#34;&gt;Accessing traces in Eventing&lt;/h2&gt;
&lt;p&gt;To access the traces, you use either the Zipkin or Jaeger tool. Details about using these tools to access
traces are provided in the Knative Serving observability section:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../../serving/accessing-traces#zipkin&#34;&gt;Zipkin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../../serving/accessing-traces#jaeger&#34;&gt;Jaeger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;p&gt;The following demonstrates how to trace requests in Knative Eventing with Zipkin, using the
&lt;a href=&#34;https://github.com/knative/eventing/blob/main/test/conformance/broker_tracing_test.go&#34;&gt;&lt;code&gt;TestBrokerTracing&lt;/code&gt;&lt;/a&gt;
End-to-End test.&lt;/p&gt;
&lt;p&gt;For this example, assume the following details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything happens in the &lt;code&gt;includes-incoming-trace-id-2qszn&lt;/code&gt; namespace.&lt;/li&gt;
&lt;li&gt;The Broker is named &lt;code&gt;br&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;There are two Triggers that are associated with the Broker:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;transformer&lt;/code&gt; - Filters to only allow events whose type is &lt;code&gt;transformer&lt;/code&gt;.
Sends the event to the Kubernetes Service &lt;code&gt;transformer&lt;/code&gt;, which will reply with an
identical event, except the replied event&amp;rsquo;s type will be &lt;code&gt;logger&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logger&lt;/code&gt; - Filters to only allow events whose type is &lt;code&gt;logger&lt;/code&gt;. Sends the event to
the Kubernetes Service &lt;code&gt;logger&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;An event is sent to the Broker with the type &lt;code&gt;transformer&lt;/code&gt;, by the Pod named &lt;code&gt;sender&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given the above, the expected path and behavior of an event is as follows:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sender&lt;/code&gt; Pod sends the request to the Broker.&lt;/li&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s ingress Pod.&lt;/li&gt;
&lt;li&gt;Go to the &lt;code&gt;imc-dispatcher&lt;/code&gt; Channel (imc stands for InMemoryChannel).&lt;/li&gt;
&lt;li&gt;Go to both Triggers.
&lt;ol&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s filter Pod for the Trigger &lt;code&gt;logger&lt;/code&gt;. The Trigger&amp;rsquo;s filter ignores this event.&lt;/li&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s filter Pod for the Trigger &lt;code&gt;transformer&lt;/code&gt;. The filter does pass, so it goes to the Kubernetes Service pointed at, also named &lt;code&gt;transformer&lt;/code&gt;.
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;transformer&lt;/code&gt; Pod replies with the modified event.&lt;/li&gt;
&lt;li&gt;Go to an InMemory dispatcher.&lt;/li&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s ingress Pod.&lt;/li&gt;
&lt;li&gt;Go to the InMemory dispatcher.&lt;/li&gt;
&lt;li&gt;Go to both Triggers.
&lt;ol&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s filter Pod for the Trigger &lt;code&gt;transformer&lt;/code&gt;. The Trigger&amp;rsquo;s filter ignores the event.&lt;/li&gt;
&lt;li&gt;Go to the Broker&amp;rsquo;s filter Pod for the Trigger &lt;code&gt;logger&lt;/code&gt;. The filter passes.
&lt;ol&gt;
&lt;li&gt;Go to the &lt;code&gt;logger&lt;/code&gt; Pod. There is no reply.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a screenshot of the trace view in Zipkin. All the red letters have been added to the screenshot and correspond to the expectations earlier in this section:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;../images/AnnotatedTrace.png&#34; alt=&#34;Annotated Trace&#34;&gt;&lt;/p&gt;
&lt;p&gt;This is the same screenshot without the annotations.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;../images/RawTrace.png&#34; alt=&#34;Raw Trace&#34;&gt;&lt;/p&gt;
&lt;p&gt;If you are interested, here is the &lt;a href=&#34;../data/ee46c4c6be1df717b3b82f55b531912f.json&#34;&gt;raw JSON&lt;/a&gt; of the trace.&lt;/p&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Metrics API</title>
<link>https://knative.dev/v0.23-docs/eventing/metrics/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/metrics/</guid>
<description>
&lt;br&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; The metrics API may change in the future, this serves as a snapshot of the current metrics.&lt;/p&gt;
&lt;h2 id=&#34;admin&#34;&gt;Admin&lt;/h2&gt;
&lt;p&gt;Administrators can monitor Eventing based on the metrics exposed by each Eventing component.
Metrics are listed next.&lt;/p&gt;
&lt;h3 id=&#34;broker---ingress&#34;&gt;Broker - Ingress&lt;/h3&gt;
&lt;p&gt;Use the following metrics to debug how broker ingress performs and what events are dispacthed via the ingress component.
By aggregating the metrics over the http code, events can be separated into two classes, successful (2xx) and failed events (5xx).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Metric Name&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Type&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Tags&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Unit&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Number of events received by a Broker&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Counter&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;broker_name&lt;br&gt;event_type&lt;br&gt;namespace_name&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Dimensionless&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_dispatch_latencies&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;The time spent dispatching an event to a Channel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Histogram&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;broker_name&lt;br&gt;event_type&lt;br&gt;namespace_name&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Milliseconds&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;broker---filter&#34;&gt;Broker - Filter&lt;/h3&gt;
&lt;p&gt;Use the following metrics to debug how broker filter performs and what events are dispatched via the filter component.
Also user can measure the latency of the actual filtering action on an event.
By aggregating the metrics over the http code, events can be separated into two classes, successful (2xx) and failed events (5xx).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Metric Name&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Type&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Tags&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Unit&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Number of events received by a Broker&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Counter&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;broker_name&lt;br&gt;container_name=&lt;br&gt;filter_type&lt;br&gt;namespace_name&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;trigger_name&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Dimensionless&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_dispatch_latencies&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;The time spent dispatching an event to a Channel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Histogram&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;broker_name&lt;br&gt;container_name&lt;br&gt;filter_type&lt;br&gt;namespace_name&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;trigger_name&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Milliseconds&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_processing_latencies&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;The time spent processing an event before it is dispatched to a Trigger subscriber&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Histogram&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;broker_name&lt;br&gt;container_name&lt;br&gt;filter_type&lt;br&gt;namespace_name&lt;br&gt;trigger_name&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Milliseconds&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;in-memory-dispatcher&#34;&gt;In-memory Dispatcher&lt;/h3&gt;
&lt;p&gt;In-memory channel can be evaluated via the following metrics.
By aggregating the metrics over the http code, events can be separated into two classes, successful (2xx) and failed events (5xx).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Metric Name&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Type&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Tags&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Unit&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Number of events dispatched by the in-memory channel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Counter&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;container_name&lt;br&gt;event_type=&lt;br&gt;namespace_name=&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Dimensionless&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_dispatch_latencies&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;The time spent dispatching an event from a in-memory Channel&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Histogram&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;container_name&lt;br&gt;event_type&lt;br&gt;namespace_name=&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;unique_name&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Milliseconds&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; A number of metrics eg. controller, Go runtime and others are omitted here as they are common across most components. For more about these metrics check the &lt;a href=&#34;../../serving/metrics#controller&#34;&gt;Serving metrics API section&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;eventing-sources&#34;&gt;Eventing sources&lt;/h3&gt;
&lt;p&gt;Eventing sources are created by users who own the related system, so they can trigger applications with events.
Every source exposes by default a number of metrics to help user monitor events dispatched. Use the following metrics
to verify that events have been delivered from the source side, thus verifying that the source and any connection with the source work as expected.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Metric Name&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Type&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Tags&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Unit&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Number of events sent by the source&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Counter&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_source&lt;br&gt;event_type&lt;br&gt;name&lt;br&gt;namespace_name&lt;br&gt;resource_group&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;response_error&lt;br&gt;response_timeout&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Dimensionless&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;retry_event_count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Number of events sent by the source in retries&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Counter&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;event_source&lt;br&gt;event_type&lt;br&gt;name&lt;br&gt;namespace_name&lt;br&gt;resource_group&lt;br&gt;response_code&lt;br&gt;response_code_class&lt;br&gt;response_error&lt;br&gt;response_timeout&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Dimensionless&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
</item>
<item>
<title>V0.23-Docs: Knative Eventing code samples</title>
<link>https://knative.dev/v0.23-docs/eventing/samples/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://knative.dev/v0.23-docs/eventing/samples/</guid>
<description>
&lt;p&gt;Use the following code samples to help you understand the various use cases for
Knative Eventing and Event Sources.
&lt;a href=&#34;../&#34;&gt;Learn more about Knative Eventing and Eventing Sources&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;../../samples&#34;&gt;&lt;strong&gt;See all Knative code samples&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
</description>
</item>
</channel>
</rss>