Repository: knative-sandbox/eventing-kafka-broker
Pull request #2739 (2022-10-21 11:14:05)

Refactor ConsumerVerticleFactory and enhance dispatcher logging
As highlighted in [1], our logging statements don't contain enough info to contextualize a specific log statement.

In this PR, I'm restructuring the way we create Consumer verticles, so that we can inject arbitrary context to our log statements based on the specific resource / egress they are acting for.

The large refactoring is also meant to simplify the CosumerVerticleFactoryImpl which was doing to much and it has been a cause of a recent misconfiguration [2].

Previously, we had a single CosumerVerticleFactoryImpl that was doing everything to build a Consumer verticle, now, I'm braking down the logic into multiple single purpose classes.

[1] https://github.com/knative-sandbox/eventing-kafka-broker/pull/1999
[2] https://github.com/knative-sandbox/eventing-kafka-broker/commit/1865320ffedf9e02b608bcd6cd8c89d8b6c9ba43

Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com>

knative-prow[bot]: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/2739#" title="Author self-approved">pierDipi</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=knative-sandbox%2Feventing-kafka-broker).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/knative-sandbox/eventing-kafka-broker/blob/main/OWNERS)~~ [pierDipi]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
codecov[bot]: # [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) Report
> Merging [#2739](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (f19ff16) into [main](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/commit/1865320ffedf9e02b608bcd6cd8c89d8b6c9ba43?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) (1865320) will **decrease** coverage by `5.90%`.
> The diff coverage is `n/a`.

> :exclamation: Current head f19ff16 differs from pull request most recent head 85bc46c. Consider uploading reports for the commit 85bc46c to get more accurate results

```diff
@@             Coverage Diff              @@
##               main    #2739      +/-   ##
============================================
- Coverage     61.09%   55.19%   -5.91%     
============================================
  Files           148       75      -73     
  Lines         10580     8035    -2545     
  Branches        231        0     -231     
============================================
- Hits           6464     4435    -2029     
+ Misses         3655     3276     -379     
+ Partials        461      324     -137     
```

| Flag | Coverage Δ | |
|---|---|---|
| java-unittests | `?` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#carryforward-flags-in-the-pull-request-comment) to find out more.

| [Impacted Files](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) | Coverage Δ | |
|---|---|---|
| [...ker/dispatcher/impl/consumer/ConsumerVerticle.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9Db25zdW1lclZlcnRpY2xlLmphdmE=) | | |
| [...patcher/impl/consumer/OrderedConsumerVerticle.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9PcmRlcmVkQ29uc3VtZXJWZXJ0aWNsZS5qYXZh) | | |
| [...tcher/impl/consumer/UnorderedConsumerVerticle.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9jb25zdW1lci9Vbm9yZGVyZWRDb25zdW1lclZlcnRpY2xlLmphdmE=) | | |
| [...r/dispatcher/main/ConsumerVerticleFactoryImpl.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvbWFpbi9Db25zdW1lclZlcnRpY2xlRmFjdG9yeUltcGwuamF2YQ==) | | |
| [...ng/kafka/broker/dispatcher/main/DispatcherEnv.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvbWFpbi9EaXNwYXRjaGVyRW52LmphdmE=) | | |
| [...e/eventing/kafka/broker/core/file/FileWatcher.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvZmlsZS9GaWxlV2F0Y2hlci5qYXZh) | | |
| [.../kafka/broker/dispatcher/impl/ResourceContext.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvaW1wbC9SZXNvdXJjZUNvbnRleHQuamF2YQ==) | | |
| [...ative/eventing/kafka/broker/dispatcher/Filter.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9kaXNwYXRjaGVyL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2Rpc3BhdGNoZXIvRmlsdGVyLmphdmE=) | | |
| [...nting/kafka/broker/core/tracing/TracingConfig.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvdHJhY2luZy9UcmFjaW5nQ29uZmlnLmphdmE=) | | |
| [...ceiver/impl/handler/IngressRequestHandlerImpl.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox#diff-ZGF0YS1wbGFuZS9yZWNlaXZlci9zcmMvbWFpbi9qYXZhL2Rldi9rbmF0aXZlL2V2ZW50aW5nL2thZmthL2Jyb2tlci9yZWNlaXZlci9pbXBsL2hhbmRsZXIvSW5ncmVzc1JlcXVlc3RIYW5kbGVySW1wbC5qYXZh) | | |
| ... and [63 more](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/2739/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox) | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=knative-sandbox)

knative-prow[bot]: @pierDipi: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
unit-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/unit-tests_eventing-kafka-broker_main/1583417186330873856) | true | `/test unit-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1583417197701632000) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
matzew: /assign @matzew 
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1583417199383547904) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1583417199761035264) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
upgrade-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1583417193624768512) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1583417201975627776) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1583417202747379712) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1583417200616673280) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
integration-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1583417188893593600) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1584445136744484864) | true | `/test channel-reconciler-tests-ssl`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
integration-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1583417190520983552) | true | `/test integration-tests-namespaced-broker`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1584445136744484864) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1584445136106950656) | true | `/test integration-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1583417193876426752) | true | `/test reconciler-tests`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1584445136744484864) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1584445136106950656) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1584445136186642432) | true | `/test integration-tests-namespaced-broker`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 85bc46c248df65bc3c3d0d54d4310e86c2283338 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1583417195579314176) | true | `/test reconciler-tests-namespaced-broker`
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1584445136744484864) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1584445136106950656) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1584445136186642432) | true | `/test integration-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1584445136308277248) | true | `/test reconciler-tests`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
knative-prow[bot]: @pierDipi: The following tests **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
channel-integration-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-ssl_eventing-kafka-broker_main/1584445136446689280) | true | `/test channel-integration-tests-ssl`
channel-integration-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-ssl_eventing-kafka-broker_main/1584445136538963968) | true | `/test channel-integration-tests-sasl-ssl`
channel-integration-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-integration-tests-sasl-plain_eventing-kafka-broker_main/1584445136622850048) | true | `/test channel-integration-tests-sasl-plain`
upgrade-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/upgrade-tests_eventing-kafka-broker_main/1584445136249556992) | true | `/test upgrade-tests`
channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-ssl_eventing-kafka-broker_main/1584445137587539968) | true | `/test channel-reconciler-tests-sasl-ssl`
channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-sasl-plain_eventing-kafka-broker_main/1584445138422206464) | true | `/test channel-reconciler-tests-sasl-plain`
channel-reconciler-tests-ssl_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/channel-reconciler-tests-ssl_eventing-kafka-broker_main/1584445136744484864) | true | `/test channel-reconciler-tests-ssl`
integration-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests_eventing-kafka-broker_main/1584445136106950656) | true | `/test integration-tests`
integration-tests-namespaced-broker_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/integration-tests-namespaced-broker_eventing-kafka-broker_main/1584445136186642432) | true | `/test integration-tests-namespaced-broker`
reconciler-tests_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests_eventing-kafka-broker_main/1584445136308277248) | true | `/test reconciler-tests`
reconciler-tests-namespaced-broker_eventing-kafka-broker_main | 7f13b782573a6fdf87f4e5afda78faf1e72d02e9 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/2739/reconciler-tests-namespaced-broker_eventing-kafka-broker_main/1584445136379580416) | true | `/test reconciler-tests-namespaced-broker`

[Your PR dashboard](https://prow.knative.dev/pr).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->

Patch:
diff --git a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
index bbfd5b293..bc303253d 100644
--- a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
+++ b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/consumer_types.go
@@ -27,7 +27,6 @@ import (
 	"knative.dev/pkg/apis"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 
-	eventingv1alpha1 "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing"
 )
 
@@ -125,8 +124,23 @@ type DestinationReply struct {
 }
 
 type Auth struct {
-	NetSpec  *bindings.KafkaNetSpec
-	AuthSpec *eventingv1alpha1.Auth
+	NetSpec    *bindings.KafkaNetSpec
+	SecretSpec *SecretSpec
+}
+
+type SecretSpec struct {
+	// Secret reference for SASL and SSL configurations.
+	Ref *SecretReference `json:"ref,omitempty"`
+}
+
+type SecretReference struct {
+	Name      string `json:"name"`
+	Namespace string `json:"namespace"`
+}
+
+func (a *SecretSpec) HasSecret() bool {
+	return a != nil && a.Ref != nil &&
+		a.Ref.Name != "" && a.Ref.Namespace != ""
 }
 
 type DeliverySpec struct {
diff --git a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/zz_generated.deepcopy.go b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/zz_generated.deepcopy.go
index 3a68974e8..01104965c 100644
--- a/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/zz_generated.deepcopy.go
+++ b/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1/zz_generated.deepcopy.go
@@ -23,7 +23,6 @@ package v1alpha1
 
 import (
 	runtime "k8s.io/apimachinery/pkg/runtime"
-	eventingv1alpha1 "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
 	v1beta1 "knative.dev/eventing-kafka/pkg/apis/bindings/v1beta1"
 	duckv1 "knative.dev/eventing/pkg/apis/duck/v1"
 	eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
@@ -39,9 +38,9 @@ func (in *Auth) DeepCopyInto(out *Auth) {
 		*out = new(v1beta1.KafkaNetSpec)
 		(*in).DeepCopyInto(*out)
 	}
-	if in.AuthSpec != nil {
-		in, out := &in.AuthSpec, &out.AuthSpec
-		*out = new(eventingv1alpha1.Auth)
+	if in.SecretSpec != nil {
+		in, out := &in.SecretSpec, &out.SecretSpec
+		*out = new(SecretSpec)
 		(*in).DeepCopyInto(*out)
 	}
 	return
@@ -519,6 +518,43 @@ func (in *ReplyStrategy) DeepCopy() *ReplyStrategy {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *SecretReference) DeepCopyInto(out *SecretReference) {
+	*out = *in
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretReference.
+func (in *SecretReference) DeepCopy() *SecretReference {
+	if in == nil {
+		return nil
+	}
+	out := new(SecretReference)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *SecretSpec) DeepCopyInto(out *SecretSpec) {
+	*out = *in
+	if in.Ref != nil {
+		in, out := &in.Ref, &out.Ref
+		*out = new(SecretReference)
+		**out = **in
+	}
+	return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretSpec.
+func (in *SecretSpec) DeepCopy() *SecretSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(SecretSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *TopicReply) DeepCopyInto(out *TopicReply) {
 	*out = *in
diff --git a/control-plane/pkg/keda/keda.go b/control-plane/pkg/keda/keda.go
index e2049af3c..d6637654b 100644
--- a/control-plane/pkg/keda/keda.go
+++ b/control-plane/pkg/keda/keda.go
@@ -156,10 +156,10 @@ func GenerateTriggerAuthentication(cg *kafkainternals.ConsumerGroup, saslType *s
 		}
 	}
 
-	if cg.Spec.Template.Spec.Auth.AuthSpec != nil && cg.Spec.Template.Spec.Auth.AuthSpec.Secret.Ref.Name != "" {
+	if cg.Spec.Template.Spec.Auth.SecretSpec != nil && cg.Spec.Template.Spec.Auth.SecretSpec.Ref.Name != "" {
 		host := kedav1alpha1.AuthSecretTargetRef{
 			Parameter: "host", //TODO: parameter name?
-			Name:      cg.Spec.Template.Spec.Auth.AuthSpec.Secret.Ref.Name,
+			Name:      cg.Spec.Template.Spec.Auth.SecretSpec.Ref.Name,
 			Key:       "", //TODO: key value?
 		}
 		secretTargetRefs = append(secretTargetRefs, host)
diff --git a/control-plane/pkg/reconciler/channel/v2/channelv2.go b/control-plane/pkg/reconciler/channel/v2/channelv2.go
index 7f8241283..df9483c30 100644
--- a/control-plane/pkg/reconciler/channel/v2/channelv2.go
+++ b/control-plane/pkg/reconciler/channel/v2/channelv2.go
@@ -42,6 +42,7 @@ import (
 	messagingv1beta1 "knative.dev/eventing-kafka/pkg/apis/messaging/v1beta1"
 	"knative.dev/eventing-kafka/pkg/common/constants"
 	v1 "knative.dev/eventing/pkg/apis/duck/v1"
+	messaging "knative.dev/eventing/pkg/apis/messaging/v1"
 	"knative.dev/pkg/apis"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 	"knative.dev/pkg/controller"
@@ -63,6 +64,9 @@ import (
 	internalslst "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/listers/eventing/v1alpha1"
 	coreconfig "knative.dev/eventing-kafka-broker/control-plane/pkg/core/config"
 	kafkalogging "knative.dev/eventing-kafka-broker/control-plane/pkg/logging"
+
+	kedafunc "knative.dev/eventing-kafka-broker/control-plane/pkg/keda"
+	messaginglisters "knative.dev/eventing/pkg/client/listers/messaging/v1"
 )
 
 const (
@@ -93,12 +97,9 @@ type Reconciler struct {
 	// mock the function used during the reconciliation loop.
 	NewKafkaClusterAdminClient kafka.NewClusterAdminClientFunc
 
-	// NewKafkaClient creates new sarama Client. It's convenient to add this as Reconciler field so that we can
-	// mock the function used during the reconciliation loop.
-	NewKafkaClient kafka.NewClientFunc
-
-	ConfigMapLister corelisters.ConfigMapLister
-	ServiceLister   corelisters.ServiceLister
+	ConfigMapLister    corelisters.ConfigMapLister
+	ServiceLister      corelisters.ServiceLister
+	SubscriptionLister messaginglisters.SubscriptionLister
 
 	Prober prober.Prober
 
@@ -151,13 +152,14 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, channel *messagingv1beta
 		)
 	}
 
-	// get security option for Sarama with secret info in it
-	saramaSecurityOption := security.NewSaramaSecurityOptionFromSecret(secret)
-
-	if err := r.TrackSecret(secret, channel); err != nil {
-		return fmt.Errorf("failed to track secret: %w", err)
+	authContext, err := security.ResolveAuthContextFromLegacySecret(secret)
+	if err != nil {
+		return statusConditionManager.FailedToResolveConfig(fmt.Errorf("failed to resolve auth context: %w", err))
 	}
 
+	// get security option for Sarama with secret info in it
+	saramaSecurityOption := security.NewSaramaSecurityOptionFromSecret(authContext.VirtualSecret)
+
 	topicName := kafka.ChannelTopic(TopicPrefix, channel)
 
 	kafkaClusterAdminSaramaConfig, err := kafka.GetSaramaConfig(saramaSecurityOption)
@@ -165,26 +167,12 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, channel *messagingv1beta
 		return statusConditionManager.FailedToCreateTopic(topicName, fmt.Errorf("error getting cluster admin sarama config: %w", err))
 	}
 
-	// Manually commit the offsets in KafkaChannel controller.
-	// That's because we want to make sure we initialize the offsets within the controller
-	// before dispatcher actually starts consuming messages.
-	kafkaClientSaramaConfig, err := kafka.GetSaramaConfig(saramaSecurityOption, kafka.DisableOffsetAutoCommitConfigOption)
-	if err != nil {
-		return statusConditionManager.FailedToCreateTopic(topicName, fmt.Errorf("error getting cluster admin sarama config: %w", err))
-	}
-
 	kafkaClusterAdminClient, err := r.NewKafkaClusterAdminClient(topicConfig.BootstrapServers, kafkaClusterAdminSaramaConfig)
 	if err != nil {
 		return statusConditionManager.FailedToCreateTopic(topicName, fmt.Errorf("cannot obtain Kafka cluster admin, %w", err))
 	}
 	defer kafkaClusterAdminClient.Close()
 
-	kafkaClient, err := r.NewKafkaClient(topicConfig.BootstrapServers, kafkaClientSaramaConfig)
-	if err != nil {
-		return statusConditionManager.FailedToCreateTopic(topicName, fmt.Errorf("error getting sarama config: %w", err))
-	}
-	defer kafkaClient.Close()
-
 	// create the topic
 	topic, err := kafka.CreateTopicIfDoesntExist(kafkaClusterAdminClient, logger, topicName, topicConfig)
 	if err != nil {
@@ -208,13 +196,13 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, channel *messagingv1beta
 	logger.Debug("Got contract data from config map", zap.Any(base.ContractLogKey, ct))
 
 	// Get resource configuration
-	channelResource, err := r.getChannelContractResource(ctx, topic, channel, secret, topicConfig)
+	channelResource, err := r.getChannelContractResource(ctx, topic, channel, authContext, topicConfig)
 	if err != nil {
 		return statusConditionManager.FailedToResolveConfig(err)
 	}
 	coreconfig.SetDeadLetterSinkURIFromEgressConfig(&channel.Status.DeliveryStatus, channelResource.EgressConfig)
 
-	allReady, subscribersError := r.reconcileSubscribers(ctx, channel, topicName, topicConfig.BootstrapServers)
+	allReady, subscribersError := r.reconcileSubscribers(ctx, channel, topicName, topicConfig.BootstrapServers, secret)
 	if subscribersError != nil {
 		channel.GetConditionSet().Manage(&channel.Status).MarkFalse(KafkaChannelConditionSubscribersReady, "failed to reconcile all subscribers", subscribersError.Error())
 		return subscribersError
@@ -246,7 +234,7 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, channel *messagingv1beta
 	}
 	statusConditionManager.ConfigMapUpdated()
 
-	// We update receiver and dispatcher pods annotation regardless of our contract changed or not due to the fact
+	// We update receiver pods annotation regardless of our contract changed or not due to the fact
 	// that in a previous reconciliation we might have failed to update one of our data plane pod annotation, so we want
 	// to anyway update remaining annotations with the contract generation that was saved in the CM.
 
@@ -265,21 +253,6 @@ func (r *Reconciler) ReconcileKind(ctx context.Context, channel *messagingv1beta
 	}
 	logger.Debug("Updated receiver pod annotation")
 
-	// Update volume generation annotation of dispatcher pods
-	if err := r.UpdateDispatcherPodsAnnotation(ctx, logger, ct.Generation); err != nil {
-		// Failing to update dispatcher pods annotation leads to config map refresh delayed by several seconds.
-		// Since the dispatcher side is the consumer side, we don't lose availability, and we can consider the Channel
-		// ready. So, log out the error and move on to the next step.
-		logger.Warn(
-			"Failed to update dispatcher pod annotation to trigger an immediate config map refresh",
-			zap.Error(err),
-		)
-
-		statusConditionManager.FailedToUpdateDispatcherPodsAnnotation(err)
-	} else {
-		logger.Debug("Updated dispatcher pod annotation")
-	}
-
 	channelService, err := r.reconcileChannelService(ctx, channel)
 	if err != nil {
 		logger.Error("Error reconciling the backwards compatibility channel service.", zap.Error(err))
@@ -373,7 +346,7 @@ func (r *Reconciler) FinalizeKind(ctx context.Context, channel *messagingv1beta1
 
 	channel.Status.Address = nil
 
-	// We update receiver and dispatcher pods annotation regardless of our contract changed or not due to the fact
+	// We update receiver annotation regardless of our contract changed or not due to the fact
 	// that in a previous reconciliation we might have failed to update one of our data plane pod annotation, so we want
 	// to update anyway remaining annotations with the contract generation that was saved in the CM.
 	// Note: if there aren't changes to be done at the pod annotation level, we just skip the update.
@@ -382,10 +355,6 @@ func (r *Reconciler) FinalizeKind(ctx context.Context, channel *messagingv1beta1
 	if err := r.UpdateReceiverPodsAnnotation(ctx, logger, ct.Generation); err != nil {
 		return err
 	}
-	// Update volume generation annotation of dispatcher pods
-	if err := r.UpdateDispatcherPodsAnnotation(ctx, logger, ct.Generation); err != nil {
-		return err
-	}
 
 	//  Rationale: after deleting a topic closing a producer ends up blocking and requesting metadata for max.block.ms
 	//  because topic metadata aren't available anymore.
@@ -435,8 +404,13 @@ func (r *Reconciler) FinalizeKind(ctx context.Context, channel *messagingv1beta1
 		)
 	}
 
+	authContext, err := security.ResolveAuthContextFromLegacySecret(secret)
+	if err != nil {
+		return fmt.Errorf("failed to resolve auth context: %w", err)
+	}
+
 	// get security option for Sarama with secret info in it
-	saramaSecurityOption := security.NewSaramaSecurityOptionFromSecret(secret)
+	saramaSecurityOption := security.NewSaramaSecurityOptionFromSecret(authContext.VirtualSecret)
 
 	saramaConfig, err := kafka.GetSaramaConfig(saramaSecurityOption)
 	if err != nil {
@@ -463,7 +437,7 @@ func (r *Reconciler) FinalizeKind(ctx context.Context, channel *messagingv1beta1
 	return nil
 }
 
-func (r *Reconciler) reconcileSubscribers(ctx context.Context, channel *messagingv1beta1.KafkaChannel, topicName string, bootstrapServers []string) (bool, error) {
+func (r *Reconciler) reconcileSubscribers(ctx context.Context, channel *messagingv1beta1.KafkaChannel, topicName string, bootstrapServers []string, secret *corev1.Secret) (bool, error) {
 	logger := kafkalogging.CreateReconcileMethodLogger(ctx, channel)
 
 	channel.Status.Subscribers = make([]v1.SubscriberStatus, 0)
@@ -473,7 +447,7 @@ func (r *Reconciler) reconcileSubscribers(ctx context.Context, channel *messagin
 	for i := range channel.Spec.Subscribers {
 		s := &channel.Spec.Subscribers[i]
 		logger = logger.With(zap.Any("subscriber", s))
-		cg, err := r.reconcileConsumerGroup(ctx, channel, s, topicName, bootstrapServers)
+		cg, err := r.reconcileConsumerGroup(ctx, channel, s, topicName, bootstrapServers, secret)
 		if err != nil {
 			logger.Error("error reconciling subscriber. marking subscriber as not ready", zap.Error(err))
 			msg := fmt.Sprintf("Subscriber %v not ready: %v", s.UID, err)
@@ -538,8 +512,9 @@ func (r *Reconciler) reconcileSubscribers(ctx context.Context, channel *messagin
 	return allReady, globalErr
 }
 
-func (r Reconciler) reconcileConsumerGroup(ctx context.Context, channel *messagingv1beta1.KafkaChannel, s *v1.SubscriberSpec, topicName string, bootstrapServers []string) (*internalscg.ConsumerGroup, error) {
-	newcg := &internalscg.ConsumerGroup{
+func (r Reconciler) reconcileConsumerGroup(ctx context.Context, channel *messagingv1beta1.KafkaChannel, s *v1.SubscriberSpec, topicName string, bootstrapServers []string, secret *corev1.Secret) (*internalscg.ConsumerGroup, error) {
+
+	expectedCg := &internalscg.ConsumerGroup{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      string(s.UID),
 			Namespace: channel.Namespace,
@@ -576,32 +551,48 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, channel *messagi
 		},
 	}
 
+	// TODO: make keda annotation values configurable and maybe unexposed
+	subscriptionAnnotations, err := r.getSubscriptionAnnotations(channel, s)
+	if err != nil && !apierrors.IsNotFound(err) {
+		return nil, fmt.Errorf("failed to extract subscription annotations for subscriber %v: %w", s, err)
+	}
+	expectedCg.Annotations = kedafunc.SetAutoscalingAnnotations(subscriptionAnnotations)
+
+	if secret != nil {
+		expectedCg.Spec.Template.Spec.Auth = &internalscg.Auth{
+			SecretSpec: &internalscg.SecretSpec{
+				Ref: &internalscg.SecretReference{
+					Name:      secret.Name,
+					Namespace: secret.Namespace,
+				},
+			},
+		}
+	}
+
 	cg, err := r.ConsumerGroupLister.ConsumerGroups(channel.GetNamespace()).Get(string(s.UID)) // Get by consumer group id
 	if err != nil && !apierrors.IsNotFound(err) {
 		return nil, err
 	}
-
 	if apierrors.IsNotFound(err) {
-		cg, err = r.InternalsClient.InternalV1alpha1().ConsumerGroups(newcg.GetNamespace()).Create(ctx, newcg, metav1.CreateOptions{})
+		cg, err = r.InternalsClient.InternalV1alpha1().ConsumerGroups(expectedCg.GetNamespace()).Create(ctx, expectedCg, metav1.CreateOptions{})
 		if err != nil && !apierrors.IsAlreadyExists(err) {
-			return nil, fmt.Errorf("failed to create consumer group %s/%s: %w", newcg.GetNamespace(), newcg.GetName(), err)
-		}
-		if apierrors.IsAlreadyExists(err) {
-			return newcg, nil
+			return nil, fmt.Errorf("failed to create consumer group %s/%s: %w", expectedCg.GetNamespace(), expectedCg.GetName(), err)
 		}
 		return cg, nil
 	}
 
-	if equality.Semantic.DeepDerivative(newcg.Spec, cg.Spec) {
+	if equality.Semantic.DeepDerivative(expectedCg.Spec, cg.Spec) && equality.Semantic.DeepDerivative(expectedCg.Annotations, cg.Annotations) {
 		return cg, nil
 	}
 
 	newCg := &internalscg.ConsumerGroup{
 		TypeMeta:   cg.TypeMeta,
 		ObjectMeta: cg.ObjectMeta,
-		Spec:       newcg.Spec,
+		Spec:       expectedCg.Spec,
 		Status:     cg.Status,
 	}
+	newCg.Annotations = expectedCg.Annotations
+
 	if cg, err = r.InternalsClient.InternalV1alpha1().ConsumerGroups(cg.GetNamespace()).Update(ctx, newCg, metav1.UpdateOptions{}); err != nil {
 		return nil, fmt.Errorf("failed to update consumer group %s/%s: %w", newCg.GetNamespace(), newCg.GetName(), err)
 	}
@@ -609,7 +600,7 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, channel *messagi
 	return cg, nil
 }
 
-func (r *Reconciler) getChannelContractResource(ctx context.Context, topic string, channel *messagingv1beta1.KafkaChannel, secret *corev1.Secret, config *kafka.TopicConfig) (*contract.Resource, error) {
+func (r *Reconciler) getChannelContractResource(ctx context.Context, topic string, channel *messagingv1beta1.KafkaChannel, auth *security.NetSpecAuthContext, config *kafka.TopicConfig) (*contract.Resource, error) {
 	resource := &contract.Resource{
 		Uid:    string(channel.UID),
 		Topics: []string{topic},
@@ -624,14 +615,9 @@ func (r *Reconciler) getChannelContractResource(ctx context.Context, topic strin
 		},
 	}
 
-	if secret != nil {
-		resource.Auth = &contract.Resource_AuthSecret{
-			AuthSecret: &contract.Reference{
-				Uuid:      string(secret.UID),
-				Namespace: secret.Namespace,
-				Name:      secret.Name,
-				Version:   secret.ResourceVersion,
-			},
+	if auth != nil && auth.MultiSecretReference != nil {
+		resource.Auth = &contract.Resource_MultiAuthSecret{
+			MultiAuthSecret: auth.MultiSecretReference,
 		}
 	}
 
@@ -698,3 +684,18 @@ func (r Reconciler) finalizeConsumerGroup(ctx context.Context, cg *internalscg.C
 	}
 	return nil
 }
+
+func (r *Reconciler) getSubscriptionAnnotations(channel *messagingv1beta1.KafkaChannel, subscriber *v1.SubscriberSpec) (map[string]string, error) {
+	subscriptions, err := r.SubscriptionLister.Subscriptions(channel.GetNamespace()).List(labels.Everything())
+	if err != nil {
+		return nil, fmt.Errorf("failed to list subscriptions in namespace %s: %w", channel.GetNamespace(), err)
+	}
+
+	for _, s := range subscriptions {
+		if s.UID == subscriber.UID {
+			return s.Annotations, nil
+		}
+	}
+
+	return nil, apierrors.NewNotFound(messaging.SchemeGroupVersion.WithResource("subscriptions").GroupResource(), string(subscriber.UID))
+}
diff --git a/control-plane/pkg/reconciler/channel/v2/controllerv2.go b/control-plane/pkg/reconciler/channel/v2/controllerv2.go
index aff8854e8..6d3cabe94 100644
--- a/control-plane/pkg/reconciler/channel/v2/controllerv2.go
+++ b/control-plane/pkg/reconciler/channel/v2/controllerv2.go
@@ -21,9 +21,11 @@ import (
 	"net/http"
 
 	"github.com/Shopify/sarama"
+	"go.uber.org/zap"
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/client-go/tools/cache"
 	serviceinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/service"
+	"knative.dev/pkg/logging"
 	"knative.dev/pkg/resolver"
 
 	messagingv1beta "knative.dev/eventing-kafka/pkg/apis/messaging/v1beta1"
@@ -32,6 +34,7 @@ import (
 	kubeclient "knative.dev/pkg/client/injection/kube/client"
 	"knative.dev/pkg/network"
 
+	subscriptioninformer "knative.dev/eventing/pkg/client/injection/informers/messaging/v1/subscription"
 	configmapinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap"
 	podinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/pod"
 	secretinformer "knative.dev/pkg/client/injection/kube/informers/core/v1/secret"
@@ -65,15 +68,25 @@ func NewController(ctx context.Context, configs *config.Env) *controller.Impl {
 			ContractConfigMapFormat:     configs.ContractConfigMapFormat,
 			DataPlaneNamespace:          configs.SystemNamespace,
 		},
-		NewKafkaClient:             sarama.NewClient,
 		NewKafkaClusterAdminClient: sarama.NewClusterAdmin,
 		Env:                        configs,
 		ConfigMapLister:            configmapInformer.Lister(),
 		ServiceLister:              serviceinformer.Get(ctx).Lister(),
+		SubscriptionLister:         subscriptioninformer.Get(ctx).Lister(),
 		ConsumerGroupLister:        consumerGroupInformer.Lister(),
 		InternalsClient:            consumergroupclient.Get(ctx),
 	}
 
+	logger := logging.FromContext(ctx)
+
+	_, err := reconciler.GetOrCreateDataPlaneConfigMap(ctx)
+	if err != nil {
+		logger.Fatal("Failed to get or create data plane config map",
+			zap.String("configmap", configs.DataPlaneConfigMapAsString()),
+			zap.Error(err),
+		)
+	}
+
 	impl := kafkachannelreconciler.NewImpl(ctx, reconciler)
 	IPsLister := prober.IdentityIPsLister()
 	reconciler.Prober = prober.NewAsync(ctx, http.DefaultClient, "", IPsLister, impl.EnqueueKey)
diff --git a/control-plane/pkg/reconciler/consumer/consumer.go b/control-plane/pkg/reconciler/consumer/consumer.go
index f85d5b56c..5c88214b8 100644
--- a/control-plane/pkg/reconciler/consumer/consumer.go
+++ b/control-plane/pkg/reconciler/consumer/consumer.go
@@ -199,7 +199,7 @@ func (r Reconciler) reconcileAuth(ctx context.Context, c *kafkainternals.Consume
 		return nil
 	}
 
-	if c.Spec.Auth.AuthSpec != nil {
+	if c.Spec.Auth.SecretSpec != nil {
 		secret, err := security.Secret(ctx, &SecretLocator{Consumer: c}, r.SecretProviderFunc())
 		if err != nil {
 			return fmt.Errorf("failed to get secret: %w", err)
@@ -426,12 +426,12 @@ func (r *Reconciler) trackAuthContext(c *kafkainternals.Consumer, auth *kafkaint
 		return nil
 	}
 
-	if auth.AuthSpec.HasAuth() {
+	if auth.SecretSpec.HasSecret() {
 		ref := tracker.Reference{
 			APIVersion: "v1",
 			Kind:       "Secret",
-			Namespace:  c.GetNamespace(),
-			Name:       auth.AuthSpec.Secret.Ref.Name,
+			Namespace:  auth.SecretSpec.Ref.Namespace,
+			Name:       auth.SecretSpec.Ref.Name,
 		}
 		if err := r.Tracker.TrackReference(ref, c); err != nil {
 			return fmt.Errorf("failed to track secret for rotation %s/%s: %w", ref.Namespace, ref.Name, err)
diff --git a/control-plane/pkg/reconciler/consumer/secret_locator.go b/control-plane/pkg/reconciler/consumer/secret_locator.go
index b83a3873a..640ec28e1 100644
--- a/control-plane/pkg/reconciler/consumer/secret_locator.go
+++ b/control-plane/pkg/reconciler/consumer/secret_locator.go
@@ -25,20 +25,23 @@ type SecretLocator struct {
 }
 
 func (s *SecretLocator) SecretName() (string, bool) {
-	if s.hasNoAuth() {
+	if s.hasNoSecret() {
 		return "", false
 	}
-	return s.Consumer.Spec.Auth.AuthSpec.Secret.Ref.Name, true
+	return s.Consumer.Spec.Auth.SecretSpec.Ref.Name, true
 }
 
-func (s *SecretLocator) hasNoAuth() bool {
+func (s *SecretLocator) hasNoSecret() bool {
 	return s.Consumer.Spec.Auth == nil ||
-		s.Consumer.Spec.Auth.AuthSpec == nil ||
-		s.Consumer.Spec.Auth.AuthSpec.Secret == nil ||
-		s.Consumer.Spec.Auth.AuthSpec.Secret.Ref == nil ||
-		s.Consumer.Spec.Auth.AuthSpec.Secret.Ref.Name == ""
+		s.Consumer.Spec.Auth.SecretSpec == nil ||
+		s.Consumer.Spec.Auth.SecretSpec.Ref == nil ||
+		s.Consumer.Spec.Auth.SecretSpec.Ref.Name == "" ||
+		s.Consumer.Spec.Auth.SecretSpec.Ref.Namespace == ""
 }
 
 func (s *SecretLocator) SecretNamespace() (string, bool) {
-	return s.GetNamespace(), !s.hasNoAuth()
+	if s.hasNoSecret() {
+		return "", false
+	}
+	return s.Consumer.Spec.Auth.SecretSpec.Ref.Namespace, true
 }
diff --git a/control-plane/pkg/reconciler/consumergroup/auth.go b/control-plane/pkg/reconciler/consumergroup/auth.go
index 54cceccef..90bea0389 100644
--- a/control-plane/pkg/reconciler/consumergroup/auth.go
+++ b/control-plane/pkg/reconciler/consumergroup/auth.go
@@ -30,8 +30,8 @@ import (
 func (r Reconciler) newAuthConfigOption(ctx context.Context, cg *kafkainternals.ConsumerGroup) (kafka.ConfigOption, error) {
 	var secret *corev1.Secret
 
-	if hasAuthSpecAuthConfig(cg.Spec.Template.Spec.Auth) {
-		secret, err := security.Secret(ctx, &AuthSpecSecretLocator{cg}, security.DefaultSecretProviderFunc(r.SecretLister, r.KubeClient))
+	if hasSecretSpecConfig(cg.Spec.Template.Spec.Auth) {
+		secret, err := security.Secret(ctx, &SecretSpecSecretLocator{cg}, security.DefaultSecretProviderFunc(r.SecretLister, r.KubeClient))
 		if err != nil {
 			return nil, err
 		}
@@ -73,12 +73,12 @@ func (sl *NetSpecSecretLocator) SecretNamespace() (string, bool) {
 	return sl.Namespace, hasNetSpecAuthConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth)
 }
 
-func hasAuthSpecAuthConfig(auth *kafkainternals.Auth) bool {
+func hasSecretSpecConfig(auth *kafkainternals.Auth) bool {
 	return auth != nil &&
-		auth.AuthSpec != nil &&
-		auth.AuthSpec.Secret != nil &&
-		auth.AuthSpec.Secret.Ref != nil &&
-		auth.AuthSpec.Secret.Ref.Name != ""
+		auth.SecretSpec != nil &&
+		auth.SecretSpec.Ref != nil &&
+		auth.SecretSpec.Ref.Name != "" &&
+		auth.SecretSpec.Ref.Namespace != ""
 }
 
 func hasNetSpecAuthConfig(auth *kafkainternals.Auth) bool {
@@ -93,21 +93,22 @@ func hasNetSpecAuthConfig(auth *kafkainternals.Auth) bool {
 			auth.NetSpec.SASL.Type.SecretKeyRef != nil)
 }
 
-type AuthSpecSecretLocator struct {
+type SecretSpecSecretLocator struct {
 	*kafkainternals.ConsumerGroup
 }
 
-func (sl *AuthSpecSecretLocator) SecretNamespace() (string, bool) {
-	if !hasAuthSpecAuthConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth) {
+func (sl *SecretSpecSecretLocator) SecretNamespace() (string, bool) {
+	if !hasSecretSpecConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth) {
 		return "", false
 	}
-	return sl.ConsumerGroup.GetNamespace(), hasAuthSpecAuthConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth)
+	namespace := sl.ConsumerGroup.Spec.Template.Spec.Auth.SecretSpec.Ref.Namespace
+	return namespace, hasSecretSpecConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth)
 }
 
-func (sl *AuthSpecSecretLocator) SecretName() (string, bool) {
-	if !hasAuthSpecAuthConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth) {
+func (sl *SecretSpecSecretLocator) SecretName() (string, bool) {
+	if !hasSecretSpecConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth) {
 		return "", false
 	}
-	name := sl.ConsumerGroup.Spec.Template.Spec.Auth.AuthSpec.Secret.Ref.Name
-	return name, hasAuthSpecAuthConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth)
+	name := sl.ConsumerGroup.Spec.Template.Spec.Auth.SecretSpec.Ref.Name
+	return name, hasSecretSpecConfig(sl.ConsumerGroup.Spec.Template.Spec.Auth)
 }
diff --git a/control-plane/pkg/reconciler/consumergroup/consumergroup.go b/control-plane/pkg/reconciler/consumergroup/consumergroup.go
index 58d1da7d6..cbef3c3c9 100644
--- a/control-plane/pkg/reconciler/consumergroup/consumergroup.go
+++ b/control-plane/pkg/reconciler/consumergroup/consumergroup.go
@@ -449,7 +449,7 @@ func (r Reconciler) reconcileKedaObjects(ctx context.Context, cg *kafkainternals
 	var triggerAuthentication *kedav1alpha1.TriggerAuthentication
 	var secret *corev1.Secret
 
-	if hasAuthSpecAuthConfig(cg.Spec.Template.Spec.Auth) || hasNetSpecAuthConfig(cg.Spec.Template.Spec.Auth) {
+	if hasSecretSpecConfig(cg.Spec.Template.Spec.Auth) || hasNetSpecAuthConfig(cg.Spec.Template.Spec.Auth) {
 		saslType, err := r.retrieveSaslTypeIfPresent(ctx, cg)
 		if err != nil {
 			return err
diff --git a/control-plane/pkg/reconciler/trigger/v2/triggerv2.go b/control-plane/pkg/reconciler/trigger/v2/triggerv2.go
index 77d43c746..1afc5960f 100644
--- a/control-plane/pkg/reconciler/trigger/v2/triggerv2.go
+++ b/control-plane/pkg/reconciler/trigger/v2/triggerv2.go
@@ -46,8 +46,6 @@ import (
 	kafkalogging "knative.dev/eventing-kafka-broker/control-plane/pkg/logging"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/security"
 
-	"knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
-
 	kedafunc "knative.dev/eventing-kafka-broker/control-plane/pkg/keda"
 	brokerreconciler "knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/broker"
 )
@@ -136,7 +134,12 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, broker *eventing
 		offset = sources.OffsetEarliest
 	}
 
-	secret, err := security.Secret(ctx, &security.AnnotationsSecretLocator{Annotations: broker.Status.Annotations, Namespace: trigger.Namespace}, security.DefaultSecretProviderFunc(r.SecretLister, r.KubeClient))
+	namespace := broker.GetNamespace()
+	if broker.Spec.Config.Namespace != "" {
+		namespace = broker.Spec.Config.Namespace
+	}
+
+	secret, err := security.Secret(ctx, &security.AnnotationsSecretLocator{Annotations: broker.Status.Annotations, Namespace: namespace}, security.DefaultSecretProviderFunc(r.SecretLister, r.KubeClient))
 	if err != nil {
 		return nil, fmt.Errorf("failed to get secret: %w", err)
 	}
@@ -189,11 +192,10 @@ func (r Reconciler) reconcileConsumerGroup(ctx context.Context, broker *eventing
 
 	if secret != nil {
 		expectedCg.Spec.Template.Spec.Auth = &internalscg.Auth{
-			AuthSpec: &v1alpha1.Auth{
-				Secret: &v1alpha1.Secret{
-					Ref: &v1alpha1.SecretReference{
-						Name: secret.Name,
-					},
+			SecretSpec: &internalscg.SecretSpec{
+				Ref: &internalscg.SecretReference{
+					Name:      secret.Name,
+					Namespace: secret.Namespace,
 				},
 			},
 		}
diff --git a/data-plane/config/channelv2/500-dispatcher.yaml b/data-plane/config/channelv2/500-dispatcher.yaml
index 318d83159..4af010a39 100644
--- a/data-plane/config/channelv2/500-dispatcher.yaml
+++ b/data-plane/config/channelv2/500-dispatcher.yaml
@@ -70,7 +70,7 @@ spec:
             - mountPath: /tmp
               name: cache
             - mountPath: /etc/logging
-              name: kafka-channel-config-logging
+              name: kafka-config-logging
               readOnly: true
             - mountPath: /etc/tracing
               name: config-tracing
@@ -93,7 +93,7 @@ spec:
             - name: WEBCLIENT_CONFIG_FILE_PATH
               value: /etc/config/config-kafka-channel-webclient.properties
             - name: DATA_PLANE_CONFIG_FILE_PATH
-              value: /etc/channels-subscriptions/data
+              value: /etc/contract-resources/data
             - name: EGRESSES_INITIAL_CAPACITY
               value: "20"
             - name: INSTANCE_ID
@@ -162,7 +162,7 @@ spec:
             name: config-kafka-channel-data-plane
         - name: cache
           emptyDir: { }
-        - name: kafka-channel-config-logging
+        - name: kafka-config-logging
           configMap:
             name: kafka-config-logging
         - name: config-tracing
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/BaseConsumerVerticle.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/ConsumerVerticle.java
similarity index 68%
rename from data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/BaseConsumerVerticle.java
rename to data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/ConsumerVerticle.java
index d807be93d..73e4a1402 100644
--- a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/BaseConsumerVerticle.java
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/ConsumerVerticle.java
@@ -17,6 +17,8 @@ package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
 import dev.knative.eventing.kafka.broker.core.AsyncCloseable;
 import dev.knative.eventing.kafka.broker.dispatcher.RecordDispatcher;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleLoggingContext;
 import io.cloudevents.CloudEvent;
 import io.vertx.core.AbstractVerticle;
 import io.vertx.core.Future;
@@ -25,7 +27,6 @@ import io.vertx.core.Vertx;
 import io.vertx.kafka.client.consumer.KafkaConsumer;
 
 import java.util.Objects;
-import java.util.Set;
 import java.util.function.BiFunction;
 
 import org.slf4j.Logger;
@@ -33,25 +34,27 @@ import org.slf4j.LoggerFactory;
 
 import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
 
-public abstract class BaseConsumerVerticle extends AbstractVerticle {
+public abstract class ConsumerVerticle extends AbstractVerticle {
 
-  public interface Initializer extends BiFunction<Vertx, BaseConsumerVerticle, Future<Void>> {
+
+  public interface Initializer extends BiFunction<Vertx, ConsumerVerticle, Future<Void>> {
   }
 
-  private static final Logger logger = LoggerFactory.getLogger(BaseConsumerVerticle.class);
+  private static final Logger logger = LoggerFactory.getLogger(ConsumerVerticle.class);
 
   private final Initializer initializer;
-  final Set<String> topics;
+
+  private final ConsumerVerticleContext consumerVerticleContext;
 
   KafkaConsumer<Object, CloudEvent> consumer;
   RecordDispatcher recordDispatcher;
   private AsyncCloseable closeable;
 
-  public BaseConsumerVerticle(final Initializer initializer, final Set<String> topics) {
-    Objects.requireNonNull(topics);
-    Objects.requireNonNull(initializer);
+  public ConsumerVerticle(final ConsumerVerticleContext consumerVerticleContext,
+                          final Initializer initializer) {
+    Objects.requireNonNull(consumerVerticleContext);
 
-    this.topics = topics;
+    this.consumerVerticleContext = consumerVerticleContext;
     this.initializer = initializer;
   }
 
@@ -70,12 +73,12 @@ public abstract class BaseConsumerVerticle extends AbstractVerticle {
 
   @Override
   public void stop(Promise<Void> stopPromise) {
-    logger.info("Stopping consumer {}", keyValue("topics", topics));
+    logger.info("Stopping consumer {}", consumerVerticleContext.getLoggingKeyValue());
 
     AsyncCloseable
       .compose(this.recordDispatcher, this.closeable, this.consumer::close)
       .close()
-      .onComplete(r -> logger.info("Consumer verticle closed {}", keyValue("topics", topics)));
+      .onComplete(r -> logger.info("Consumer verticle closed {}", consumerVerticleContext.getLoggingKeyValue()));
 
     stopPromise.tryComplete();
   }
@@ -93,15 +96,17 @@ public abstract class BaseConsumerVerticle extends AbstractVerticle {
   }
 
   void exceptionHandler(Throwable cause) {
-    // TODO Add context (consumer group, resource id, etc)
-    // TODO Send message on event bus
-    logger.error("Consumer exception {}", keyValue("topics", topics), cause);
+    logger.error("Consumer exception {}", consumerVerticleContext.getLoggingKeyValue(), cause);
 
     // Propagate exception to the verticle exception handler.
-    if (context.exceptionHandler() != null) {
-      this.context.exceptionHandler().handle(cause);
+    if (super.context.exceptionHandler() != null) {
+      super.context.exceptionHandler().handle(cause);
     }
   }
 
+  protected ConsumerVerticleContext getConsumerVerticleContext() {
+    return consumerVerticleContext;
+  }
+
   public abstract PartitionRevokedHandler getPartitionsRevokedHandler();
 }
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticle.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticle.java
index f9a166ebd..619d618cf 100644
--- a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticle.java
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticle.java
@@ -15,26 +15,23 @@
  */
 package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
-import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.OrderedAsyncExecutor;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
 import io.cloudevents.CloudEvent;
 import io.github.bucket4j.Bandwidth;
 import io.github.bucket4j.Bucket;
 import io.github.bucket4j.Refill;
 import io.github.bucket4j.local.LocalBucketBuilder;
 import io.github.bucket4j.local.SynchronizationStrategy;
-import io.micrometer.core.instrument.MeterRegistry;
 import io.vertx.core.Future;
 import io.vertx.core.Promise;
 import io.vertx.kafka.client.common.TopicPartition;
 import io.vertx.kafka.client.consumer.KafkaConsumerRecord;
 import io.vertx.kafka.client.consumer.KafkaConsumerRecords;
-import org.apache.kafka.clients.consumer.ConsumerConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.time.Duration;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -44,7 +41,7 @@ import java.util.concurrent.atomic.AtomicLong;
 
 import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
 
-public class OrderedConsumerVerticle extends BaseConsumerVerticle {
+public class OrderedConsumerVerticle extends ConsumerVerticle {
 
   private static final Logger logger = LoggerFactory.getLogger(OrderedConsumerVerticle.class);
 
@@ -53,25 +50,19 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
 
   private final Map<TopicPartition, OrderedAsyncExecutor> recordDispatcherExecutors;
   private final PartitionRevokedHandler partitionRevokedHandler;
-  private final DataPlaneContract.Egress egress;
   private final Bucket bucket;
 
   private final AtomicBoolean closed;
   private final AtomicLong pollTimer;
   private final AtomicBoolean isPollInFlight;
 
-  private final MeterRegistry meterRegistry;
+  public OrderedConsumerVerticle(final ConsumerVerticleContext context,
+                                 final Initializer initializer) {
+    super(context, initializer);
 
-  public OrderedConsumerVerticle(final DataPlaneContract.Egress egress,
-                                 final Initializer initializer,
-                                 final Set<String> topics,
-                                 final int maxPollRecords,
-                                 final MeterRegistry meterRegistry) {
-    super(initializer, topics);
-
-    final var vReplicas = Math.max(1, egress.getVReplicas());
-    final var tokens = maxPollRecords * vReplicas;
-    if (egress.getFeatureFlags().getEnableRateLimiter()) {
+    final var vReplicas = Math.max(1, context.getEgress().getVReplicas());
+    final var tokens = context.getMaxPollRecords() * vReplicas;
+    if (context.getEgress().getFeatureFlags().getEnableRateLimiter()) {
       this.bucket = new LocalBucketBuilder()
         .addLimit(Bandwidth.classic(tokens, Refill.greedy(tokens, Duration.ofSeconds(1))))
         .withSynchronizationStrategy(SynchronizationStrategy.SYNCHRONIZED)
@@ -81,19 +72,20 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
       this.bucket = null;
     }
 
-    this.egress = egress;
     this.recordDispatcherExecutors = new ConcurrentHashMap<>();
     this.closed = new AtomicBoolean(false);
     this.isPollInFlight = new AtomicBoolean(false);
     this.pollTimer = new AtomicLong(-1);
-    this.meterRegistry = meterRegistry;
 
     partitionRevokedHandler = partitions -> {
       // Stop executors associated with revoked partitions.
       for (final TopicPartition partition : partitions) {
         final var executor = recordDispatcherExecutors.remove(partition);
         if (executor != null) {
-          logger.info("Stopping executor {}", keyValue("topicPartition", partition));
+          logger.info("Stopping executor {} {}",
+            getConsumerVerticleContext().getLoggingKeyValue(),
+            keyValue("topicPartition", partition)
+          );
           executor.stop();
         }
       }
@@ -104,7 +96,7 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
   @Override
   void startConsumer(Promise<Void> startPromise) {
     // We need to sub first, then we can start the polling loop
-    this.consumer.subscribe(this.topics)
+    this.consumer.subscribe(Set.copyOf(getConsumerVerticleContext().getResource().getTopicsList()))
       .onFailure(startPromise::fail)
       .onSuccess(v -> {
         if (this.pollTimer.compareAndSet(-1, 0)) {
@@ -117,18 +109,16 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
 
   private void poll() {
     if (this.closed.get() || this.isPollInFlight.get()) {
-      logger.debug("Consumer closed or poll is in-flight {}", keyValue("topics", topics));
+      logger.debug("Consumer closed or poll is in-flight {}", getConsumerVerticleContext().getLoggingKeyValue());
       return;
     }
 
     // When we don't have tokens available, we just wait `POLLING_MS`
     // before trying to poll again.
     if (bucket != null && bucket.getAvailableTokens() <= 0) {
-      logger.info("Rate limiter, tokens unavailable {} {} {} {}",
-        keyValue("resource", egress.getReference()),
-        keyValue(ConsumerConfig.GROUP_ID_CONFIG, egress.getConsumerGroup()),
+      logger.info("Rate limiter, tokens unavailable {} {}",
         keyValue("wait.ms", POLLING_MS),
-        keyValue("topics", topics)
+        getConsumerVerticleContext().getLoggingKeyValue()
       );
       return;
     }
@@ -136,15 +126,12 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
     // Only poll new records when at-least one internal per-partition queue
     // needs more records.
     if (areAllExecutorsBusy()) {
-      logger.debug("all executors are busy {}", keyValue("topics", topics));
+      logger.debug("all executors are busy {}", getConsumerVerticleContext().getLoggingKeyValue());
       return;
     }
 
     if (this.isPollInFlight.compareAndSet(false, true)) {
-      logger.debug("Polling for records {} {}",
-        keyValue("topics", topics),
-        keyValue("resource", egress.getReference())
-      );
+      logger.debug("Polling for records {}", getConsumerVerticleContext().getLoggingKeyValue());
 
       this.consumer.poll(POLLING_TIMEOUT)
         .onSuccess(this::recordsHandler)
@@ -199,7 +186,7 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
 
   private Future<Void> dispatch(final KafkaConsumerRecord<Object, CloudEvent> record) {
     if (this.closed.get()) {
-      return Future.failedFuture("Consumer verticle closed topics=" + topics + " resource=" + egress.getReference());
+      return Future.failedFuture("Consumer verticle closed " + getConsumerVerticleContext());
     }
 
     return this.recordDispatcher.dispatch(record);
@@ -210,7 +197,11 @@ public class OrderedConsumerVerticle extends BaseConsumerVerticle {
     if (executor != null) {
       return executor;
     }
-    executor = new OrderedAsyncExecutor(topicPartition, meterRegistry, egress);
+    executor = new OrderedAsyncExecutor(
+      topicPartition,
+      getConsumerVerticleContext().getMetricsRegistry(),
+      getConsumerVerticleContext().getEgress()
+    );
     this.recordDispatcherExecutors.put(topicPartition, executor);
     return executor;
   }
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticle.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticle.java
index 738e69668..1e7a0cd6f 100644
--- a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticle.java
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticle.java
@@ -16,6 +16,7 @@
 package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
 import dev.knative.eventing.kafka.broker.dispatcher.DeliveryOrder;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
 import io.cloudevents.CloudEvent;
 import io.vertx.core.Future;
 import io.vertx.core.Promise;
@@ -34,7 +35,7 @@ import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
 /**
  * This {@link io.vertx.core.Verticle} implements an unordered consumer logic, as described in {@link DeliveryOrder#UNORDERED}.
  */
-public final class UnorderedConsumerVerticle extends BaseConsumerVerticle {
+public final class UnorderedConsumerVerticle extends ConsumerVerticle {
 
   private static final Logger logger = LoggerFactory.getLogger(UnorderedConsumerVerticle.class);
 
@@ -43,30 +44,21 @@ public final class UnorderedConsumerVerticle extends BaseConsumerVerticle {
   // to block a verticle thread.
   private static final Duration POLL_TIMEOUT = Duration.ofMillis(500);
 
-  private final int maxPollRecords;
-
   private final AtomicBoolean closed;
   private final AtomicInteger inFlightRecords;
   private final AtomicBoolean isPollInFlight;
 
-  public UnorderedConsumerVerticle(final Initializer initializer,
-                                   final Set<String> topics,
-                                   final int maxPollRecords) {
-    super(initializer, topics);
-    if (maxPollRecords <= 0) {
-      this.maxPollRecords = 500;
-    } else {
-      this.maxPollRecords = maxPollRecords;
-    }
+  public UnorderedConsumerVerticle(final ConsumerVerticleContext context,
+                                   final Initializer initializer) {
+    super(context, initializer);
     this.inFlightRecords = new AtomicInteger(0);
     this.closed = new AtomicBoolean(false);
     this.isPollInFlight = new AtomicBoolean(false);
   }
 
   @Override
-  void startConsumer(Promise<Void> startPromise) {
-    this.consumer.subscribe(this.topics, startPromise);
-
+  void startConsumer(final Promise<Void> startPromise) {
+    this.consumer.subscribe(Set.copyOf(getConsumerVerticleContext().getResource().getTopicsList()), startPromise);
     startPromise.future()
       .onSuccess(v -> poll());
   }
@@ -88,13 +80,13 @@ public final class UnorderedConsumerVerticle extends BaseConsumerVerticle {
     if (closed.get() || isPollInFlight.get()) {
       return;
     }
-    if (inFlightRecords.get() >= maxPollRecords) {
+    if (inFlightRecords.get() >= getConsumerVerticleContext().getMaxPollRecords()) {
       logger.info(
         "In flight records exceeds " + ConsumerConfig.MAX_POLL_RECORDS_CONFIG +
           " waiting for response from subscriber before polling for new records {} {} {}",
-        keyValue(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, maxPollRecords),
+        keyValue(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, getConsumerVerticleContext().getMaxPollRecords()),
         keyValue("records", inFlightRecords),
-        keyValue("topics", topics)
+        getConsumerVerticleContext().getLoggingKeyValue()
       );
       return;
     }
@@ -104,7 +96,7 @@ public final class UnorderedConsumerVerticle extends BaseConsumerVerticle {
         .onSuccess(this::handleRecords)
         .onFailure(cause -> {
           isPollInFlight.set(false);
-          logger.error("Failed to poll messages {}", keyValue("topics", topics), cause);
+          logger.error("Failed to poll messages {}", getConsumerVerticleContext().getLoggingKeyValue(), cause);
           // Wait before retrying.
           vertx.setTimer(BACKOFF_DELAY_MS, t -> poll());
         });
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerFactory.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerFactory.java
new file mode 100644
index 000000000..dada0bb0a
--- /dev/null
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerFactory.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.tracing.TracingPolicy;
+import io.vertx.kafka.client.common.KafkaClientOptions;
+import io.vertx.kafka.client.consumer.KafkaConsumer;
+
+import java.util.Map;
+
+@FunctionalInterface
+public interface ConsumerFactory<K, V> {
+
+  KafkaConsumer<K, V> create(final Vertx vertx, final Map<String, Object> consumerConfigs);
+
+  static <K, V> ConsumerFactory<K, V> defaultFactory() {
+    return new ConsumerFactory<>() {
+
+      private KafkaConsumer<K, V> consumer;
+
+      @Override
+      public KafkaConsumer<K, V> create(Vertx vertx, Map<String, Object> consumerConfigs) {
+        if (consumer == null) {
+          consumer = KafkaConsumer.create(vertx, new KafkaClientOptions().setConfig(consumerConfigs)
+            // Disable tracing provided by vertx-kafka-client, because it doesn't work well with our dispatch logic.
+            // RecordDispatcher, when receiving a new record, takes care of adding the proper receive record span.
+            .setTracingPolicy(TracingPolicy.IGNORE));
+        }
+        return consumer;
+      }
+    };
+  }
+}
+
+
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleBuilder.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleBuilder.java
new file mode 100644
index 000000000..ea4b44619
--- /dev/null
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleBuilder.java
@@ -0,0 +1,262 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+import dev.knative.eventing.kafka.broker.core.metrics.Metrics;
+import dev.knative.eventing.kafka.broker.core.security.Credentials;
+import dev.knative.eventing.kafka.broker.core.security.KafkaClientsAuth;
+import dev.knative.eventing.kafka.broker.dispatcher.CloudEventSender;
+import dev.knative.eventing.kafka.broker.dispatcher.DeliveryOrder;
+import dev.knative.eventing.kafka.broker.dispatcher.Filter;
+import dev.knative.eventing.kafka.broker.dispatcher.ResponseHandler;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.NoopResponseHandler;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherImpl;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherMutatorChain;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.ResourceContext;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.ResponseToHttpEndpointHandler;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.ResponseToKafkaTopicHandler;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.CloudEventOverridesMutator;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.ConsumerVerticle;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.OffsetManager;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.OrderedConsumerVerticle;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.PartitionRevokedHandler;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.UnorderedConsumerVerticle;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.AllFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.AnyFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.CeSqlFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.ExactFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.NotFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.PrefixFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.SuffixFilter;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.http.WebClientCloudEventSender;
+import io.cloudevents.CloudEvent;
+import io.vertx.core.Future;
+import io.vertx.core.Handler;
+import io.vertx.core.Vertx;
+import io.vertx.core.impl.VertxInternal;
+import io.vertx.core.tracing.TracingPolicy;
+import io.vertx.ext.web.client.WebClient;
+import io.vertx.kafka.client.common.KafkaClientOptions;
+import io.vertx.kafka.client.common.TopicPartition;
+import io.vertx.kafka.client.common.tracing.ConsumerTracer;
+import io.vertx.kafka.client.consumer.KafkaConsumer;
+import io.vertx.kafka.client.producer.KafkaProducer;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
+
+public class ConsumerVerticleBuilder {
+
+  private final static CloudEventSender NO_DEAD_LETTER_SINK_SENDER = CloudEventSender.noop("No dead letter sink set");
+
+  private final ConsumerVerticleContext consumerVerticleContext;
+
+  public ConsumerVerticleBuilder(final ConsumerVerticleContext consumerVerticleContext) {
+    this.consumerVerticleContext = consumerVerticleContext;
+  }
+
+  public ConsumerVerticle build() {
+    return createConsumerVerticle(getInitializer());
+  }
+
+  private ConsumerVerticle.Initializer getInitializer() {
+    return (vertx, consumerVerticle) -> consumerVerticleContext.getAuthProvider()
+      .getCredentials(consumerVerticleContext.getResource())
+      .onSuccess(credentials -> build(vertx, consumerVerticle, credentials))
+      .mapEmpty();
+  }
+
+  private void build(final Vertx vertx, final ConsumerVerticle consumerVerticle, final Credentials credentials) {
+    KafkaClientsAuth.attachCredentials(consumerVerticleContext.getConsumerConfigs(), credentials);
+    KafkaClientsAuth.attachCredentials(consumerVerticleContext.getProducerConfigs(), credentials);
+
+    final KafkaConsumer<Object, CloudEvent> consumer = this.consumerVerticleContext
+      .getConsumerFactory()
+      .create(vertx, consumerVerticleContext.getConsumerConfigs());
+    consumerVerticle.setConsumer(consumer);
+
+    final var metricsCloser = Metrics.register(consumer.unwrap());
+    consumerVerticle.setCloser(metricsCloser);
+
+    final var egressSubscriberSender = createConsumerRecordSender(vertx);
+    final var egressDeadLetterSender = createDeadLetterSinkRecordSender(vertx);
+    final var responseHandler = createResponseHandler(vertx);
+
+    final var offsetManager = new OffsetManager(
+      vertx,
+      consumer,
+      (v) -> {
+      },
+      getCommitIntervalMs()
+    );
+
+    final var recordDispatcher = new RecordDispatcherMutatorChain(
+      new RecordDispatcherImpl(
+        new ResourceContext(consumerVerticleContext.getResource(), consumerVerticleContext.getEgress()),
+        getFilter(),
+        egressSubscriberSender,
+        egressDeadLetterSender,
+        responseHandler,
+        offsetManager,
+        ConsumerTracer.create(((VertxInternal) vertx).tracer(),
+          new KafkaClientOptions().setConfig(consumerVerticleContext.getConsumerConfigs())
+            // Make sure the policy is propagate for the manually instantiated consumer tracer
+            .setTracingPolicy(TracingPolicy.PROPAGATE)), Metrics.getRegistry()),
+
+      new CloudEventOverridesMutator(consumerVerticleContext.getResource().getCloudEventOverrides())
+    );
+    consumerVerticle.setRecordDispatcher(recordDispatcher);
+
+    final var partitionRevokedHandlers = List.of(
+      consumerVerticle.getPartitionsRevokedHandler(),
+      offsetManager.getPartitionRevokedHandler()
+    );
+    consumer.partitionsRevokedHandler(handlePartitionsRevoked(partitionRevokedHandlers));
+  }
+
+  private ConsumerVerticle createConsumerVerticle(final ConsumerVerticle.Initializer initializer) {
+    return switch (DeliveryOrder.fromContract(consumerVerticleContext.getEgress().getDeliveryOrder())) {
+      case ORDERED -> new OrderedConsumerVerticle(consumerVerticleContext, initializer);
+      case UNORDERED -> new UnorderedConsumerVerticle(consumerVerticleContext, initializer);
+    };
+  }
+
+  /**
+   * For each handler call partitionRevoked and wait for the future to complete.
+   *
+   * @param partitionRevokedHandlers partition revoked handlers
+   * @return a single handler that dispatches the partition revoked event to the given handlers.
+   */
+  private Handler<Set<TopicPartition>> handlePartitionsRevoked(final List<PartitionRevokedHandler> partitionRevokedHandlers) {
+    return partitions -> {
+
+      ConsumerVerticleContext.logger.info("Received revoke partitions for consumer {} {}",
+        consumerVerticleContext.getLoggingKeyValue(),
+        keyValue("partitions", partitions)
+      );
+
+      final var futures = new ArrayList<Future<Void>>(partitionRevokedHandlers.size());
+      for (PartitionRevokedHandler partitionRevokedHandler : partitionRevokedHandlers) {
+        futures.add(partitionRevokedHandler.partitionRevoked(partitions));
+      }
+
+      for (final var future : futures) {
+        try {
+          future.toCompletionStage().toCompletableFuture().get(1, TimeUnit.SECONDS);
+        } catch (final Exception ignored) {
+          ConsumerVerticleContext.logger.warn("Partition revoked handler failed {} {}",
+            consumerVerticleContext.getLoggingKeyValue(),
+            keyValue("partitions", partitions)
+          );
+        }
+      }
+    };
+  }
+
+  private Filter getFilter() {
+    // Dialected filters should override the attributes filter
+    if (consumerVerticleContext.getEgress().getDialectedFilterCount() > 0) {
+      return getFilter(consumerVerticleContext.getEgress().getDialectedFilterList());
+    } else if (consumerVerticleContext.getEgress().hasFilter()) {
+      return new ExactFilter(consumerVerticleContext.getEgress().getFilter().getAttributesMap());
+    }
+    return Filter.noop();
+  }
+
+  private static Filter getFilter(List<DataPlaneContract.DialectedFilter> filters) {
+    return new AllFilter(filters.stream().map(ConsumerVerticleBuilder::getFilter).collect(Collectors.toSet()));
+  }
+
+  private static Filter getFilter(DataPlaneContract.DialectedFilter filter) {
+    return switch (filter.getFilterCase()) {
+      case EXACT -> new ExactFilter(filter.getExact().getAttributesMap());
+      case PREFIX -> new PrefixFilter(filter.getPrefix().getAttributesMap());
+      case SUFFIX -> new SuffixFilter(filter.getSuffix().getAttributesMap());
+      case NOT -> new NotFilter(getFilter(filter.getNot().getFilter()));
+      case ANY -> new AnyFilter(filter.getAny().getFiltersList().stream().map(ConsumerVerticleBuilder::getFilter).collect(Collectors.toSet()));
+      case ALL -> new AllFilter(filter.getAll().getFiltersList().stream().map(ConsumerVerticleBuilder::getFilter).collect(Collectors.toSet()));
+      case CESQL -> new CeSqlFilter(filter.getCesql().getExpression());
+      default -> Filter.noop();
+    };
+  }
+
+  private ResponseHandler createResponseHandler(final Vertx vertx) {
+    if (consumerVerticleContext.getEgress().hasReplyUrl()) {
+      return new ResponseToHttpEndpointHandler(new WebClientCloudEventSender(
+        vertx,
+        WebClient.create(vertx, consumerVerticleContext.getWebClientOptions()),
+        consumerVerticleContext.getEgress().getReplyUrl(),
+        consumerVerticleContext.getEgressConfig()
+      ));
+    }
+
+    if (consumerVerticleContext.getEgress().hasDiscardReply()) {
+      return new NoopResponseHandler();
+    }
+
+    final KafkaProducer<String, CloudEvent> producer = this.consumerVerticleContext
+      .getProducerFactory()
+      .create(vertx, consumerVerticleContext.getProducerConfigs());
+    return new ResponseToKafkaTopicHandler(producer, consumerVerticleContext.getResource().getTopics(0));
+  }
+
+  private CloudEventSender createConsumerRecordSender(final Vertx vertx) {
+    return new WebClientCloudEventSender(
+      vertx,
+      WebClient.create(vertx, consumerVerticleContext.getWebClientOptions()),
+      consumerVerticleContext.getEgress().getDestination(),
+      consumerVerticleContext.getEgressConfig()
+    );
+  }
+
+  private CloudEventSender createDeadLetterSinkRecordSender(final Vertx vertx) {
+    if (hasDeadLetterSink(consumerVerticleContext.getEgressConfig())) {
+      var webClientOptions = consumerVerticleContext.getWebClientOptions();
+      // TODO use numPartitions for ordered delivery or max.poll.records for unordered delivery
+      // if (egress.getVReplicas() > 0) {
+      //   webClientOptions = new WebClientOptions(this.webClientOptions);
+      //   webClientOptions.setMaxPoolSize(egress.getVReplicas());
+      // }
+      return new WebClientCloudEventSender(
+        vertx,
+        WebClient.create(vertx, webClientOptions),
+        consumerVerticleContext.getEgressConfig().getDeadLetter(),
+        consumerVerticleContext.getEgressConfig()
+      );
+    }
+
+    return NO_DEAD_LETTER_SINK_SENDER;
+  }
+
+  private int getCommitIntervalMs() {
+    final var commitInterval = consumerVerticleContext.getConsumerConfigs().get(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG);
+    if (commitInterval == null) {
+      return 5000;
+    }
+    return Integer.parseInt(String.valueOf(commitInterval));
+  }
+
+  private static boolean hasDeadLetterSink(final DataPlaneContract.EgressConfig egressConfig) {
+    return !(egressConfig == null || egressConfig.getDeadLetter().isEmpty());
+  }
+}
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleContext.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleContext.java
new file mode 100644
index 000000000..76ad27801
--- /dev/null
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleContext.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+import dev.knative.eventing.kafka.broker.core.security.AuthProvider;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.InvalidCloudEventInterceptor;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.KeyDeserializer;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.http.WebClientCloudEventSender;
+import io.cloudevents.CloudEvent;
+import io.micrometer.core.instrument.MeterRegistry;
+import io.vertx.ext.web.client.WebClientOptions;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
+
+public class ConsumerVerticleContext {
+
+  public final static Logger logger = LoggerFactory.getLogger(ConsumerVerticleContext.class);
+
+  private DataPlaneContract.Resource resource;
+
+  private DataPlaneContract.Egress egress;
+  private DataPlaneContract.EgressConfig egressConfig;
+
+  private AuthProvider authProvider;
+  private MeterRegistry metricsRegistry;
+
+  private Map<String, Object> consumerConfigs;
+  private Map<String, Object> producerConfigs;
+  private WebClientOptions webClientOptions;
+
+  private ConsumerFactory<Object, CloudEvent> consumerFactory;
+  private ProducerFactory<String, CloudEvent> producerFactory;
+
+  private Integer maxPollRecords;
+  private static final int DEFAULT_MAX_POLL_RECORDS = 50;
+
+  private ConsumerVerticleLoggingContext loggingContext;
+
+  public ConsumerVerticleContext withConsumerConfigs(final Map<String, Object> consumerConfigs) {
+    this.consumerConfigs = new HashMap<>(consumerConfigs);
+    return this;
+  }
+
+  public ConsumerVerticleContext withProducerConfigs(final Map<String, Object> producerConfigs) {
+    this.producerConfigs = new HashMap<>(producerConfigs);
+    return this;
+  }
+
+  public ConsumerVerticleContext withResource(final DataPlaneContract.Resource resource, final DataPlaneContract.Egress egress) {
+    Objects.requireNonNull(resource);
+    Objects.requireNonNull(consumerConfigs);
+    Objects.requireNonNull(producerConfigs);
+
+    // Copy resource and remove egresses to avoid keeping references to all egresses.
+    this.resource = DataPlaneContract.Resource.newBuilder(resource).clearEgresses().build();
+    withEgress(egress);
+
+    consumerConfigs.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, resource.getBootstrapServers());
+    producerConfigs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, resource.getBootstrapServers());
+
+    consumerConfigs.put(ConsumerConfig.GROUP_ID_CONFIG, egress.getConsumerGroup());
+    consumerConfigs.put(KeyDeserializer.KEY_TYPE, egress.getKeyType());
+    if (isResourceReferenceDefined(resource.getReference())) {
+      // Set the resource reference so that when the interceptor gets a record that is not a CloudEvent, it can set
+      // CloudEvents context attributes accordingly (see InvalidCloudEventInterceptor for more information).
+      consumerConfigs.put(InvalidCloudEventInterceptor.SOURCE_NAME_CONFIG, resource.getReference().getName());
+      consumerConfigs.put(InvalidCloudEventInterceptor.SOURCE_NAMESPACE_CONFIG, resource.getReference().getNamespace());
+    }
+    return this;
+  }
+
+  private void withEgress(final DataPlaneContract.Egress egress) {
+    Objects.requireNonNull(egress);
+    Objects.requireNonNull(resource);
+    Objects.requireNonNull(consumerConfigs);
+
+    this.egress = egress;
+
+    if (egress.hasEgressConfig()) {
+      this.egressConfig = egress.getEgressConfig();
+    } else {
+      this.egressConfig = resource.getEgressConfig();
+    }
+
+    final var maxProcessingTime = maxProcessingTimeMs(consumerConfigs, egressConfig);
+    consumerConfigs.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, maxProcessingTime);
+  }
+
+  public ConsumerVerticleContext withAuthProvider(final AuthProvider authProvider) {
+    this.authProvider = authProvider;
+    return this;
+  }
+
+  public ConsumerVerticleContext withMeterRegistry(MeterRegistry metricsRegistry) {
+    this.metricsRegistry = metricsRegistry;
+    return this;
+  }
+
+  public ConsumerVerticleContext withWebClientOptions(final WebClientOptions webClientOptions) {
+    this.webClientOptions = new WebClientOptions(webClientOptions);
+    return this;
+  }
+
+  public ConsumerVerticleContext withConsumerFactory(final ConsumerFactory<Object, CloudEvent> consumerFactory) {
+    this.consumerFactory = consumerFactory;
+    return this;
+  }
+
+  public ConsumerVerticleContext withProducerFactory(final ProducerFactory<String, CloudEvent> producerFactory) {
+    this.producerFactory = producerFactory;
+    return this;
+  }
+
+  public DataPlaneContract.Resource getResource() {
+    return resource;
+  }
+
+  public DataPlaneContract.Egress getEgress() {
+    return egress;
+  }
+
+  public int getMaxPollRecords() {
+    if (this.maxPollRecords == null) {
+      final var mpr = getConsumerConfigs().get(ConsumerConfig.MAX_POLL_RECORDS_CONFIG);
+      if (mpr == null) {
+        this.maxPollRecords = DEFAULT_MAX_POLL_RECORDS;
+      } else {
+        this.maxPollRecords = Integer.parseInt(mpr.toString());
+      }
+    }
+    return this.maxPollRecords;
+  }
+
+  public DataPlaneContract.EgressConfig getEgressConfig() {
+    return egressConfig;
+  }
+
+  public AuthProvider getAuthProvider() {
+    return authProvider;
+  }
+
+  public MeterRegistry getMetricsRegistry() {
+    return metricsRegistry;
+  }
+
+  public Map<String, Object> getConsumerConfigs() {
+    return consumerConfigs;
+  }
+
+  public Map<String, Object> getProducerConfigs() {
+    return producerConfigs;
+  }
+
+  public WebClientOptions getWebClientOptions() {
+    return webClientOptions;
+  }
+
+  private synchronized ConsumerVerticleLoggingContext getLoggingContext() {
+    if (loggingContext == null) {
+      loggingContext = new ConsumerVerticleLoggingContext(this);
+    }
+    return loggingContext;
+  }
+
+  public Object getLoggingKeyValue() {
+    return keyValue("context", getLoggingContext());
+  }
+
+  public ConsumerFactory<Object, CloudEvent> getConsumerFactory() {
+    return this.consumerFactory;
+  }
+
+  public ProducerFactory<String, CloudEvent> getProducerFactory() {
+    return this.producerFactory;
+  }
+
+  private static int maxProcessingTimeMs(final Map<String, Object> consumerConfigs, final DataPlaneContract.EgressConfig egressConfig) {
+    final var mpr = consumerConfigs.get(ConsumerConfig.MAX_POLL_RECORDS_CONFIG);
+    final long maxPollRecords = mpr == null ? /* default max.poll.records */ 500L : Long.parseLong(mpr.toString());
+    final var retryPolicy = WebClientCloudEventSender.computeRetryPolicy(egressConfig);
+    final var retry = egressConfig.getRetry();
+    final var timeout = egressConfig.getTimeout() > 0 ? egressConfig.getTimeout() : WebClientCloudEventSender.DEFAULT_TIMEOUT_MS;
+
+    long maxProcessingTimeForSingleRecord = timeout;
+    for (int i = 1; i <= retry; i++) {
+      maxProcessingTimeForSingleRecord += timeout + retryPolicy.apply(i);
+    }
+    // In addition, we add some seconds as overhead for each retry.
+    final long overhead = 1000L * retry;
+    maxProcessingTimeForSingleRecord += overhead;
+    // So far, the max processing time calculated is for one single record,
+    // however, we poll records in batches based on the `max.poll.records`
+    // configuration, so the total max processing time is:
+    //
+    // Times 2 for dead letter sink retries.
+    final var total = 2 * maxPollRecords * maxProcessingTimeForSingleRecord;
+
+    if (total >= Integer.MAX_VALUE) {
+      return Integer.MAX_VALUE;
+    }
+    return (int) total;
+  }
+
+  private static boolean isResourceReferenceDefined(DataPlaneContract.Reference resource) {
+    return resource != null && !resource.getNamespace().isBlank() && !resource.getName().isBlank();
+  }
+
+  @Override
+  public String toString() {
+    return "ConsumerVerticleContext{" + getLoggingContext() + "}";
+  }
+}
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImpl.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImpl.java
index 4ad3acff0..ac0c22e88 100644
--- a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImpl.java
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImpl.java
@@ -16,84 +16,26 @@
 package dev.knative.eventing.kafka.broker.dispatcher.main;
 
 import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
-import dev.knative.eventing.kafka.broker.contract.DataPlaneContract.EgressConfig;
-import dev.knative.eventing.kafka.broker.core.metrics.Metrics;
 import dev.knative.eventing.kafka.broker.core.security.AuthProvider;
-import dev.knative.eventing.kafka.broker.core.security.KafkaClientsAuth;
-import dev.knative.eventing.kafka.broker.dispatcher.CloudEventSender;
 import dev.knative.eventing.kafka.broker.dispatcher.ConsumerVerticleFactory;
-import dev.knative.eventing.kafka.broker.dispatcher.DeliveryOrder;
-import dev.knative.eventing.kafka.broker.dispatcher.Filter;
-import dev.knative.eventing.kafka.broker.dispatcher.ResponseHandler;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.NoopResponseHandler;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherImpl;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherMutatorChain;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.ResourceContext;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.ResponseToHttpEndpointHandler;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.ResponseToKafkaTopicHandler;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.BaseConsumerVerticle;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.CloudEventOverridesMutator;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.InvalidCloudEventInterceptor;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.KeyDeserializer;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.OffsetManager;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.OrderedConsumerVerticle;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.PartitionRevokedHandler;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.UnorderedConsumerVerticle;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.AllFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.AnyFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.CeSqlFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.ExactFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.NotFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.PrefixFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.filter.subscriptionsapi.SuffixFilter;
-import dev.knative.eventing.kafka.broker.dispatcher.impl.http.WebClientCloudEventSender;
-import io.cloudevents.CloudEvent;
+import dev.knative.eventing.kafka.broker.dispatcher.impl.consumer.ConsumerVerticle;
 import io.micrometer.core.instrument.MeterRegistry;
-import io.vertx.core.AbstractVerticle;
-import io.vertx.core.Future;
-import io.vertx.core.Handler;
-import io.vertx.core.Vertx;
-import io.vertx.core.impl.VertxInternal;
-import io.vertx.core.tracing.TracingPolicy;
-import io.vertx.ext.web.client.WebClient;
 import io.vertx.ext.web.client.WebClientOptions;
-import io.vertx.kafka.client.common.KafkaClientOptions;
-import io.vertx.kafka.client.common.TopicPartition;
-import io.vertx.kafka.client.common.tracing.ConsumerTracer;
-import io.vertx.kafka.client.consumer.KafkaConsumer;
-import io.vertx.kafka.client.producer.KafkaProducer;
-import org.apache.kafka.clients.consumer.ConsumerConfig;
-import org.apache.kafka.clients.producer.ProducerConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.util.AbstractMap.SimpleImmutableEntry;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
-import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
-import static dev.knative.eventing.kafka.broker.core.utils.Logging.keyValue;
-
 public class ConsumerVerticleFactoryImpl implements ConsumerVerticleFactory {
 
-  private static final Logger logger = LoggerFactory.getLogger(ConsumerVerticleFactoryImpl.class);
-
-  private final static CloudEventSender NO_DEAD_LETTER_SINK_SENDER = CloudEventSender.noop("No dead letter sink set");
-
   private final Map<String, Object> consumerConfigs;
   private final WebClientOptions webClientOptions;
   private final Map<String, Object> producerConfigs;
   private final AuthProvider authProvider;
+  private final MeterRegistry metricsRegistry;
 
   /**
    * All args constructor.
@@ -123,276 +65,31 @@ public class ConsumerVerticleFactoryImpl implements ConsumerVerticleFactory {
       .stream()
       .map(e -> new SimpleImmutableEntry<>(e.getKey().toString(), e.getValue().toString()))
       .collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+
     this.webClientOptions = webClientOptions;
     this.authProvider = authProvider;
+    this.metricsRegistry = metricsRegistry;
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public AbstractVerticle get(final DataPlaneContract.Resource resource, final DataPlaneContract.Egress egress) {
+  public ConsumerVerticle get(final DataPlaneContract.Resource resource, final DataPlaneContract.Egress egress) {
     Objects.requireNonNull(resource, "provide resource");
     Objects.requireNonNull(egress, "provide egress");
 
-    // Consumer and producer configs are shared objects and they act as a prototype for each instance.
-    final var consumerConfigs = new HashMap<>(this.consumerConfigs);
-    consumerConfigs.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, resource.getBootstrapServers());
-    consumerConfigs.put(ConsumerConfig.GROUP_ID_CONFIG, egress.getConsumerGroup());
-    consumerConfigs.put(KeyDeserializer.KEY_TYPE, egress.getKeyType());
-    if (isResourceReferenceDefined(resource.getReference())) {
-      // Set the resource reference so that when the interceptor gets a record that is not a CloudEvent, it can set
-      // CloudEvents context attributes accordingly (see InvalidCloudEventInterceptor for more information).
-      consumerConfigs.put(InvalidCloudEventInterceptor.SOURCE_NAME_CONFIG, resource.getReference().getName());
-      consumerConfigs.put(InvalidCloudEventInterceptor.SOURCE_NAMESPACE_CONFIG, resource.getReference().getNamespace());
-    }
-
-    final var egressConfig =
-      egress.hasEgressConfig() ?
-        egress.getEgressConfig() :
-        resource.getEgressConfig();
-
-    final var maxProcessingTime = maxProcessingTimeMs(consumerConfigs, egressConfig);
-    consumerConfigs.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, maxProcessingTime);
-
-    final var producerConfigs = new HashMap<>(this.producerConfigs);
-    producerConfigs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, resource.getBootstrapServers());
-
-    final DeliveryOrder deliveryOrder = DeliveryOrder.fromContract(egress.getDeliveryOrder());
-
-    final BaseConsumerVerticle.Initializer initializer = (vertx, consumerVerticle) ->
-      authProvider.getCredentials(resource).onSuccess(credentials -> {
-       KafkaClientsAuth.attachCredentials(consumerConfigs, credentials);
-       KafkaClientsAuth.attachCredentials(producerConfigs, credentials);
-
-       final KafkaConsumer<Object, CloudEvent> consumer = createConsumer(vertx, consumerConfigs);
-       final var metricsCloser = Metrics.register(consumer.unwrap());
-
-       final var egressSubscriberSender = createConsumerRecordSender(
-         vertx,
-         egress.getDestination(),
-         egressConfig,
-         egress
-       );
-
-       final var egressDeadLetterSender = hasDeadLetterSink(egressConfig)
-         ? createConsumerRecordSender(vertx, egressConfig.getDeadLetter(), egressConfig, egress)
-         : NO_DEAD_LETTER_SINK_SENDER;
-
-       final var filter = getFilter(egress);
-
-       final var responseHandler = getResponseHandler(egress,
-         () -> getResponseToKafkaTopicHandler(vertx, producerConfigs, resource),
-         () -> new ResponseToHttpEndpointHandler(createConsumerRecordSender(vertx, egress.getReplyUrl(), egressConfig, egress)));
-       final var commitIntervalMs = Integer.parseInt(String.valueOf(consumerConfigs.get(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG)));
-
-       final var offsetManager = new OffsetManager(vertx, consumer, (v) -> {}, commitIntervalMs);
-       final var recordDispatcherImpl = new RecordDispatcherImpl(
-         new ResourceContext(resource, egress),
-         filter,
-         egressSubscriberSender,
-         egressDeadLetterSender,
-         responseHandler,
-         offsetManager,
-         ConsumerTracer.create(
-           ((VertxInternal) vertx).tracer(),
-           new KafkaClientOptions()
-             .setConfig(consumerConfigs)
-             // Make sure the policy is propagate for the manually instantiated consumer tracer
-             .setTracingPolicy(TracingPolicy.PROPAGATE)
-         ),
-         Metrics.getRegistry()
-       );
-
-       final var recordDispatcher = new RecordDispatcherMutatorChain(
-         recordDispatcherImpl,
-         new CloudEventOverridesMutator(resource.getCloudEventOverrides())
-       );
-
-       final var partitionRevokedHandlers = List.of(
-         consumerVerticle.getPartitionsRevokedHandler(),
-         offsetManager.getPartitionRevokedHandler()
-       );
-       consumer.partitionsRevokedHandler(handlePartitionsRevoked(egress.getConsumerGroup(), partitionRevokedHandlers));
-
-       // Set all the built objects in the consumer verticle
-       consumerVerticle.setRecordDispatcher(recordDispatcher);
-       consumerVerticle.setConsumer(consumer);
-       consumerVerticle.setCloser(metricsCloser);
-     })
-       .mapEmpty();
-
-    return getConsumerVerticle(
-      egress,
-      deliveryOrder,
-      initializer,
-      new HashSet<>(resource.getTopicsList()),
-      consumerConfigs.get(ConsumerConfig.MAX_POLL_RECORDS_CONFIG),
-      Metrics.getRegistry()
-    );
-  }
-
-  /**
-   * For each handler call partitionRevoked and wait for the future to complete.
-   *
-   * @param consumerGroup            consumer group id
-   * @param partitionRevokedHandlers partition revoked handlers
-   * @return a single handler that dispatches the partition revoked event to the given handlers.
-   */
-  private Handler<Set<TopicPartition>> handlePartitionsRevoked(final String consumerGroup,
-                                                               final List<PartitionRevokedHandler> partitionRevokedHandlers) {
-    return partitions -> {
-
-      logger.info("Received revoke partitions for consumer group {} {}",
-        keyValue("group.id", consumerGroup),
-        keyValue("topicPartitions", partitions)
-      );
-
-      final var futures = new ArrayList<Future<Void>>(partitionRevokedHandlers.size());
-      for (PartitionRevokedHandler partitionRevokedHandler : partitionRevokedHandlers) {
-        futures.add(partitionRevokedHandler.partitionRevoked(partitions));
-      }
-
-      for (final var future : futures) {
-        try {
-          future
-            .toCompletionStage()
-            .toCompletableFuture()
-            .get(1, TimeUnit.SECONDS);
-        } catch (final Exception ignored) {
-        }
-      }
-    };
-  }
-
-  private Filter getFilter(DataPlaneContract.Egress egress) {
-    // Dialected filters should override the attributes filter
-    if (egress.getDialectedFilterCount() > 0) {
-      logger.debug("Egress contains dialected-filters. Dialected-filters will be used for event filtering. Egress {}", egress.getReference());
-      return getFilter(egress.getDialectedFilterList());
-    } else if (egress.hasFilter()) {
-      return new ExactFilter(egress.getFilter().getAttributesMap());
-    }
-    return Filter.noop();
-  }
-
-  private static Filter getFilter(DataPlaneContract.DialectedFilter filter) {
-    return switch (filter.getFilterCase()) {
-      case EXACT -> new ExactFilter(filter.getExact().getAttributesMap());
-      case PREFIX -> new PrefixFilter(filter.getPrefix().getAttributesMap());
-      case SUFFIX -> new SuffixFilter(filter.getSuffix().getAttributesMap());
-      case NOT -> new NotFilter(getFilter(filter.getNot().getFilter()));
-      case ANY -> new AnyFilter(filter.getAny().getFiltersList().stream().
-        map(ConsumerVerticleFactoryImpl::getFilter).collect(Collectors.toSet()));
-      case ALL -> new AllFilter(filter.getAll().getFiltersList().stream().
-        map(ConsumerVerticleFactoryImpl::getFilter).collect(Collectors.toSet()));
-      case CESQL -> new CeSqlFilter(filter.getCesql().getExpression());
-      default -> Filter.noop();
-    };
-  }
-
-  private static Filter getFilter(List<DataPlaneContract.DialectedFilter> filters) {
-    return new AllFilter(filters.stream().map(ConsumerVerticleFactoryImpl::getFilter).collect(Collectors.toSet()));
-  }
-
-  static ResponseHandler getResponseHandler(final DataPlaneContract.Egress egress,
-                                            final Supplier<ResponseHandler> kafkaSupplier,
-                                            final Supplier<ResponseHandler> httpSupplier) {
-    if (egress.hasReplyUrl()) {
-      return httpSupplier.get();
-    } else if (egress.hasReplyToOriginalTopic()) {
-      return kafkaSupplier.get();
-    } else if (egress.hasDiscardReply()) {
-      return new NoopResponseHandler();
-    }
-    //TODO: log
-    return kafkaSupplier.get();
-  }
-
-  private ResponseToKafkaTopicHandler getResponseToKafkaTopicHandler(final Vertx vertx,
-                                                                     final Map<String, Object> producerConfigs,
-                                                                     final DataPlaneContract.Resource resource) {
-    final KafkaProducer<String, CloudEvent> producer = createProducer(vertx, producerConfigs);
-    return new ResponseToKafkaTopicHandler(producer, resource.getTopics(0));
-  }
-
-  protected KafkaProducer<String, CloudEvent> createProducer(final Vertx vertx,
-                                                             final Map<String, Object> producerConfigs) {
-    Properties producerProperties = new Properties();
-    producerProperties.putAll(producerConfigs);
-    return KafkaProducer.create(vertx, producerProperties);
-  }
-
-  protected KafkaConsumer<Object, CloudEvent> createConsumer(final Vertx vertx,
-                                                             final Map<String, Object> consumerConfigs) {
-    return KafkaConsumer.create(
-      vertx,
-      new KafkaClientOptions()
-        .setConfig(consumerConfigs)
-        // Disable tracing provided by vertx-kafka-client, because it doesn't work well with our dispatch logic.
-        // RecordDispatcher, when receiving a new record, takes care of adding the proper receive record span.
-        .setTracingPolicy(TracingPolicy.IGNORE)
-    );
-  }
-
-  private CloudEventSender createConsumerRecordSender(final Vertx vertx,
-                                                      final String target,
-                                                      final EgressConfig egressConfig,
-                                                      final DataPlaneContract.Egress egress) {
-    var webClientOptions = this.webClientOptions;
-    // TODO use numPartitions for ordered delivery or max.poll.records for unordered delivery
-    // if (egress.getVReplicas() > 0) {
-    //   webClientOptions = new WebClientOptions(this.webClientOptions);
-    //   webClientOptions.setMaxPoolSize(egress.getVReplicas());
-    // }
-    return new WebClientCloudEventSender(vertx, WebClient.create(vertx, webClientOptions), target, egressConfig);
-  }
-
-  private static boolean hasDeadLetterSink(final EgressConfig egressConfig) {
-    return !(egressConfig == null || egressConfig.getDeadLetter().isEmpty());
-  }
-
-  private static AbstractVerticle getConsumerVerticle(final DataPlaneContract.Egress egress,
-                                                      final DeliveryOrder type,
-                                                      final BaseConsumerVerticle.Initializer initializer,
-                                                      final Set<String> topics,
-                                                      final Object maxPollRecords,
-                                                      final MeterRegistry meterRegistry) {
-    final var maxRecords = maxPollRecords == null ? 0 : Integer.parseInt(maxPollRecords.toString());
-    return switch (type) {
-      case ORDERED -> new OrderedConsumerVerticle(egress, initializer, topics, maxRecords, meterRegistry);
-      case UNORDERED -> new UnorderedConsumerVerticle(initializer, topics, maxRecords);
-    };
-  }
-
-  private static boolean isResourceReferenceDefined(DataPlaneContract.Reference resource) {
-    return resource != null && !resource.getNamespace().isBlank() && !resource.getName().isBlank();
-  }
-
-  private static int maxProcessingTimeMs(final HashMap<String, Object> consumerConfigs, final EgressConfig egressConfig) {
-    final var mpr = consumerConfigs.get(ConsumerConfig.MAX_POLL_RECORDS_CONFIG);
-    final long maxPollRecords = mpr == null ? /* default max.poll.records */ 500L : Long.parseLong(mpr.toString());
-    final var retryPolicy = WebClientCloudEventSender.computeRetryPolicy(egressConfig);
-    final var retry = egressConfig.getRetry();
-    final var timeout = egressConfig.getTimeout() > 0 ? egressConfig.getTimeout() : WebClientCloudEventSender.DEFAULT_TIMEOUT_MS;
-
-    long maxProcessingTimeForSingleRecord = timeout;
-    for (int i = 1; i <= retry; i++) {
-      maxProcessingTimeForSingleRecord += timeout + retryPolicy.apply(i);
-    }
-    // In addition, we add some seconds as overhead for each retry.
-    final long overhead = 1000L * retry;
-    maxProcessingTimeForSingleRecord += overhead;
-    // So far, the max processing time calculated is for one single record,
-    // however, we poll records in batches based on the `max.poll.records`
-    // configuration, so the total max processing time is:
-    //
-    // Times 2 for dead letter sink retries.
-    final var total = 2 * maxPollRecords * maxProcessingTimeForSingleRecord;
-
-    if (total >= Integer.MAX_VALUE) {
-      return Integer.MAX_VALUE;
-    }
-    return (int) total;
+    return new ConsumerVerticleBuilder(
+      new ConsumerVerticleContext()
+        .withConsumerConfigs(consumerConfigs)
+        .withProducerConfigs(producerConfigs)
+        .withWebClientOptions(webClientOptions)
+        .withAuthProvider(authProvider)
+        .withMeterRegistry(metricsRegistry)
+        .withResource(resource, egress)
+        .withConsumerFactory(ConsumerFactory.defaultFactory())
+        .withProducerFactory(ProducerFactory.defaultFactory())
+    )
+      .build();
   }
 }
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleLoggingContext.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleLoggingContext.java
new file mode 100644
index 000000000..ca17cbc7b
--- /dev/null
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleLoggingContext.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+
+import java.util.List;
+
+/**
+ * This class holds logging information for a given consumer verticle.
+ */
+public final class ConsumerVerticleLoggingContext {
+
+  private final List<String> topics;
+  private final String consumerGroup;
+  private final DataPlaneContract.Reference reference;
+  private final String destination;
+
+  public ConsumerVerticleLoggingContext(final ConsumerVerticleContext context) {
+    this.topics = context.getResource().getTopicsList();
+    this.consumerGroup = context.getEgress().getConsumerGroup();
+    this.destination = context.getEgress().getDestination();
+    this.reference = context.getEgress().getReference();
+  }
+
+  @Override
+  public String toString() {
+    return "{" +
+      "topics=" + topics +
+      ", consumerGroup='" + consumerGroup + '\'' +
+      ", destination ='" + destination + '\'' +
+      ", reference=" + reference +
+      '}';
+  }
+}
diff --git a/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ProducerFactory.java b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ProducerFactory.java
new file mode 100644
index 000000000..de60e162c
--- /dev/null
+++ b/data-plane/dispatcher/src/main/java/dev/knative/eventing/kafka/broker/dispatcher/main/ProducerFactory.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import io.vertx.core.Vertx;
+import io.vertx.core.tracing.TracingPolicy;
+import io.vertx.kafka.client.common.KafkaClientOptions;
+import io.vertx.kafka.client.consumer.KafkaConsumer;
+import io.vertx.kafka.client.producer.KafkaProducer;
+
+import java.util.Map;
+import java.util.Properties;
+
+@FunctionalInterface
+public interface ProducerFactory<K, V> {
+
+  KafkaProducer<K, V> create(final Vertx vertx, final Map<String, Object> configs);
+
+  static <K, V> ProducerFactory<K, V> defaultFactory() {
+    return new ProducerFactory<>() {
+
+      private KafkaProducer<K, V> producer;
+
+      @Override
+      public KafkaProducer<K, V> create(Vertx vertx, Map<String, Object> configs) {
+        if (producer == null) {
+          Properties producerProperties = new Properties();
+          producerProperties.putAll(configs);
+          producer = KafkaProducer.create(vertx, producerProperties);
+        }
+        return producer;
+      }
+    };
+  }
+}
diff --git a/hack/data-plane.sh b/hack/data-plane.sh
index 05bcc0ecd..9044e6db9 100755
--- a/hack/data-plane.sh
+++ b/hack/data-plane.sh
@@ -54,7 +54,7 @@ function receiver_build_push() {
   local receiver="${KNATIVE_KAFKA_BROKER_RECEIVER:-${KO_DOCKER_REPO}/knative-kafka-broker-receiver}"
   export KNATIVE_KAFKA_RECEIVER_IMAGE="${receiver}:${TAG}"
 
-  ./mvnw package jib:build -pl ${RECEIVER_DIRECTORY} -DskipTests || return $?
+  ./mvnw clean package jib:build -pl ${RECEIVER_DIRECTORY} -DskipTests || return $?
 }
 
 function dispatcher_build_push() {
@@ -63,7 +63,7 @@ function dispatcher_build_push() {
   local dispatcher="${KNATIVE_KAFKA_BROKER_DISPATCHER:-${KO_DOCKER_REPO}/knative-kafka-broker-dispatcher}"
   export KNATIVE_KAFKA_DISPATCHER_IMAGE="${dispatcher}:${TAG}"
 
-  ./mvnw package jib:build -pl "${DISPATCHER_DIRECTORY}" -DskipTests || return $?
+  ./mvnw clean package jib:build -pl "${DISPATCHER_DIRECTORY}" -DskipTests || return $?
 }
 
 function data_plane_build_push() {


Test patch:
diff --git a/.github/workflows/kind-e2e.yaml b/.github/workflows/kind-e2e.yaml
index 628f35ce7..300929e67 100644
--- a/.github/workflows/kind-e2e.yaml
+++ b/.github/workflows/kind-e2e.yaml
@@ -17,7 +17,6 @@ jobs:
       fail-fast: false # Keep running if one leg fails.
       matrix:
         k8s-version:
-          - v1.22.5
           - v1.23.3
 
         eventing-config:
@@ -41,9 +40,6 @@ jobs:
         # This is attempting to make it a bit clearer what's being tested.
         # See: https://github.com/kubernetes-sigs/kind/releases/tag/v0.9.0
         include:
-          - k8s-version: v1.22.5
-            kind-version: v0.11.1
-            kind-image-sha: sha256:d409e1b1b04d3290195e0263e12606e1b83d5289e1f80e54914f60cd1237499d
           - k8s-version: v1.23.3
             kind-version: v0.11.1
             kind-image-sha: sha256:0df8215895129c0d3221cda19847d1296c4f29ec93487339149333bd9d899e5a
diff --git a/control-plane/pkg/reconciler/channel/v2/channelv2_test.go b/control-plane/pkg/reconciler/channel/v2/channelv2_test.go
index 1d15cb5ca..d386da2a5 100644
--- a/control-plane/pkg/reconciler/channel/v2/channelv2_test.go
+++ b/control-plane/pkg/reconciler/channel/v2/channelv2_test.go
@@ -54,9 +54,11 @@ import (
 	messagingv1beta1kafkachannelreconciler "knative.dev/eventing-kafka/pkg/client/injection/reconciler/messaging/v1beta1/kafkachannel"
 
 	"github.com/rickb777/date/period"
+	internalscg "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 	kafkainternals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 	fakeconsumergroupinformer "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/injection/client/fake"
 	commonconstants "knative.dev/eventing-kafka/pkg/common/constants"
+	eventingrekttesting "knative.dev/eventing/pkg/reconciler/testing/v1"
 )
 
 const (
@@ -183,10 +185,6 @@ func TestReconcileKind(t *testing.T) {
 					base.VolumeGenerationAnnotationKey: "0",
 					"annotation_to_preserve":           "value_to_preserve",
 				}),
-				ChannelDispatcherPod(env.SystemNamespace, map[string]string{
-					base.VolumeGenerationAnnotationKey: "0",
-					"annotation_to_preserve":           "value_to_preserve",
-				}),
 			},
 			Key: testKey,
 			WantUpdates: []clientgotesting.UpdateActionImpl{
@@ -208,10 +206,6 @@ func TestReconcileKind(t *testing.T) {
 					"annotation_to_preserve":           "value_to_preserve",
 					base.VolumeGenerationAnnotationKey: "1",
 				}),
-				ChannelDispatcherPodUpdate(env.SystemNamespace, map[string]string{
-					"annotation_to_preserve":           "value_to_preserve",
-					base.VolumeGenerationAnnotationKey: "1",
-				}),
 			},
 			SkipNamespaceValidation: true, // WantCreates compare the channel namespace with configmap namespace, so skip it
 			WantCreates: []runtime.Object{
@@ -254,10 +248,6 @@ func TestReconcileKind(t *testing.T) {
 					base.VolumeGenerationAnnotationKey: "0",
 					"annotation_to_preserve":           "value_to_preserve",
 				}),
-				ChannelDispatcherPod(env.SystemNamespace, map[string]string{
-					base.VolumeGenerationAnnotationKey: "0",
-					"annotation_to_preserve":           "value_to_preserve",
-				}),
 			},
 			Key: testKey,
 			WantUpdates: []clientgotesting.UpdateActionImpl{
@@ -283,10 +273,6 @@ func TestReconcileKind(t *testing.T) {
 					"annotation_to_preserve":           "value_to_preserve",
 					base.VolumeGenerationAnnotationKey: "1",
 				}),
-				ChannelDispatcherPodUpdate(env.SystemNamespace, map[string]string{
-					"annotation_to_preserve":           "value_to_preserve",
-					base.VolumeGenerationAnnotationKey: "1",
-				}),
 			},
 			SkipNamespaceValidation: true, // WantCreates compare the channel namespace with configmap namespace, so skip it
 			WantCreates: []runtime.Object{
@@ -722,6 +708,7 @@ func TestReconcileKind(t *testing.T) {
 						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
 						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
 					)),
+					ConsumerGroupReplicas(1),
 					WithConsumerGroupFailed("failed to reconcile consumer group,", "internal error"),
 				),
 			},
@@ -1102,7 +1089,7 @@ func TestReconcileKind(t *testing.T) {
 			},
 		},
 		{
-			Name: "Reconciled normal - with single fresh subscriber - with auth - PlainText",
+			Name: "Reconciled normal - with single fresh subscriber - with auth - SSL",
 			Objects: []runtime.Object{
 				NewChannel(WithSubscribers(Subscriber1(WithFreshSubscriber))),
 				NewConfigMapWithTextData(env.SystemNamespace, DefaultEnv.GeneralConfigMapName, map[string]string{
@@ -1111,7 +1098,7 @@ func TestReconcileKind(t *testing.T) {
 					security.AuthSecretNamespaceKey:    "ns-1",
 				}),
 				NewConfigMapWithBinaryData(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, nil),
-				NewSSLSecret("ns-1", "secret-1"),
+				NewLegacySSLSecret("ns-1", "secret-1"),
 				NewConsumerGroup(
 					WithConsumerGroupName(Subscription1UUID),
 					WithConsumerGroupNamespace(ChannelNamespace),
@@ -1126,7 +1113,16 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
 						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
+						ConsumerAuth(&internalscg.Auth{
+							SecretSpec: &internalscg.SecretSpec{
+								Ref: &internalscg.SecretReference{
+									Name:      "secret-1",
+									Namespace: "ns-1",
+								},
+							},
+						}),
 					)),
+					ConsumerGroupReplicas(1),
 					ConsumerGroupReady,
 				),
 			},
@@ -1143,12 +1139,218 @@ func TestReconcileKind(t *testing.T) {
 							Topics:           []string{ChannelTopic()},
 							BootstrapServers: ChannelBootstrapServers,
 							Reference:        ChannelReference(),
-							Auth: &contract.Resource_AuthSecret{
-								AuthSecret: &contract.Reference{
-									Uuid:      SecretUUID,
+							Auth: &contract.Resource_MultiAuthSecret{
+								MultiAuthSecret: &contract.MultiSecretReference{
+									Protocol: contract.Protocol_SSL,
+									References: []*contract.SecretReference{{
+										Reference: &contract.Reference{
+											Uuid:      SecretUUID,
+											Namespace: "ns-1",
+											Name:      "secret-1",
+											Version:   SecretResourceVersion,
+										},
+										KeyFieldReferences: []*contract.KeyFieldReference{
+											{SecretKey: "user.key", Field: contract.SecretField_USER_KEY},
+											{SecretKey: "user.crt", Field: contract.SecretField_USER_CRT},
+											{SecretKey: "ca.crt", Field: contract.SecretField_CA_CRT},
+										},
+									}},
+								},
+							},
+							Ingress: &contract.Ingress{
+								Host: receiver.Host(ChannelNamespace, ChannelName),
+							},
+						},
+					},
+				}),
+			},
+			SkipNamespaceValidation: true, // WantCreates compare the channel namespace with configmap namespace, so skip it
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewChannel(
+						WithInitKafkaChannelConditions,
+						StatusConfigParsed,
+						StatusConfigMapUpdatedReady(&env),
+						StatusTopicReadyWithName(ChannelTopic()),
+						ChannelAddressable(&env),
+						WithSubscribers(Subscriber1(WithFreshSubscriber)),
+						StatusProbeSucceeded,
+						StatusChannelSubscribers(),
+					),
+				},
+			},
+			WantPatches: []clientgotesting.PatchActionImpl{
+				patchFinalizers(),
+			},
+			WantEvents: []string{
+				finalizerUpdatedEvent,
+			},
+		},
+		{
+			Name: "Reconciled normal - with single fresh subscriber - with auth - SASL SSL",
+			Objects: []runtime.Object{
+				NewChannel(WithSubscribers(Subscriber1(WithFreshSubscriber))),
+				//NewService(),
+				NewPerChannelService(DefaultEnv),
+				NewConfigMapWithTextData(env.SystemNamespace, DefaultEnv.GeneralConfigMapName, map[string]string{
+					kafka.BootstrapServersConfigMapKey: ChannelBootstrapServers,
+					security.AuthSecretNameKey:         "secret-1",
+					security.AuthSecretNamespaceKey:    "ns-1",
+				}),
+				NewConfigMapWithBinaryData(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, nil),
+				NewLegacySASLSSLSecret("ns-1", "secret-1"),
+				NewConsumerGroup(
+					WithConsumerGroupName(Subscription1UUID),
+					WithConsumerGroupNamespace(ChannelNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewChannel())),
+					WithConsumerGroupMetaLabels(OwnerAsChannelLabel),
+					WithConsumerGroupLabels(ConsumerSubscription1Label),
+					ConsumerGroupConsumerSpec(NewConsumerSpec(
+						ConsumerTopics(ChannelTopic()),
+						ConsumerConfigs(
+							ConsumerGroupIdConfig(consumerGroup(NewChannel(), GetSubscriberSpec(Subscriber1(WithFreshSubscriber)))),
+							ConsumerBootstrapServersConfig(ChannelBootstrapServers),
+						),
+						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
+						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
+						ConsumerAuth(&internalscg.Auth{
+							SecretSpec: &internalscg.SecretSpec{
+								Ref: &internalscg.SecretReference{
+									Name:      "secret-1",
 									Namespace: "ns-1",
+								},
+							},
+						}),
+					)),
+					ConsumerGroupReplicas(1),
+					ConsumerGroupReady,
+				),
+			},
+			Key: testKey,
+			WantUpdates: []clientgotesting.UpdateActionImpl{
+				ConfigMapUpdate(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, env.ContractConfigMapFormat, &contract.Contract{
+					Generation: 1,
+					Resources: []*contract.Resource{
+						{
+							Uid:              ChannelUUID,
+							Topics:           []string{ChannelTopic()},
+							BootstrapServers: ChannelBootstrapServers,
+							Reference:        ChannelReference(),
+							Auth: &contract.Resource_MultiAuthSecret{
+								MultiAuthSecret: &contract.MultiSecretReference{
+									Protocol: contract.Protocol_SASL_SSL,
+									References: []*contract.SecretReference{{
+										Reference: &contract.Reference{
+											Uuid:      SecretUUID,
+											Namespace: "ns-1",
+											Name:      "secret-1",
+											Version:   SecretResourceVersion,
+										},
+										KeyFieldReferences: []*contract.KeyFieldReference{
+											{SecretKey: "user.key", Field: contract.SecretField_USER_KEY},
+											{SecretKey: "user.crt", Field: contract.SecretField_USER_CRT},
+											{SecretKey: "ca.crt", Field: contract.SecretField_CA_CRT},
+											{SecretKey: "password", Field: contract.SecretField_PASSWORD},
+											{SecretKey: "username", Field: contract.SecretField_USER},
+											{SecretKey: "saslType", Field: contract.SecretField_SASL_MECHANISM},
+										},
+									}},
+								},
+							},
+							Ingress: &contract.Ingress{
+								Host: receiver.Host(ChannelNamespace, ChannelName),
+							},
+						},
+					},
+				}),
+			},
+			SkipNamespaceValidation: true, // WantCreates compare the channel namespace with configmap namespace, so skip it
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewChannel(
+						WithInitKafkaChannelConditions,
+						StatusConfigParsed,
+						StatusConfigMapUpdatedReady(&env),
+						StatusTopicReadyWithName(ChannelTopic()),
+						ChannelAddressable(&env),
+						WithSubscribers(Subscriber1(WithFreshSubscriber)),
+						StatusProbeSucceeded,
+						StatusChannelSubscribers(),
+					),
+				},
+			},
+			WantPatches: []clientgotesting.PatchActionImpl{
+				patchFinalizers(),
+			},
+			WantEvents: []string{
+				finalizerUpdatedEvent,
+			},
+		},
+		{
+			Name: "Reconciled normal - with single fresh subscriber - with auth - SASL",
+			Objects: []runtime.Object{
+				NewChannel(WithSubscribers(Subscriber1(WithFreshSubscriber))),
+				NewPerChannelService(DefaultEnv),
+				NewConfigMapWithTextData(env.SystemNamespace, DefaultEnv.GeneralConfigMapName, map[string]string{
+					kafka.BootstrapServersConfigMapKey: ChannelBootstrapServers,
+					security.AuthSecretNameKey:         "secret-1",
+					security.AuthSecretNamespaceKey:    "ns-1",
+				}),
+				NewConfigMapWithBinaryData(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, nil),
+				NewLegacySASLSecret("ns-1", "secret-1"),
+				NewConsumerGroup(
+					WithConsumerGroupName(Subscription1UUID),
+					WithConsumerGroupNamespace(ChannelNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewChannel())),
+					WithConsumerGroupMetaLabels(OwnerAsChannelLabel),
+					WithConsumerGroupLabels(ConsumerSubscription1Label),
+					ConsumerGroupConsumerSpec(NewConsumerSpec(
+						ConsumerTopics(ChannelTopic()),
+						ConsumerConfigs(
+							ConsumerGroupIdConfig(consumerGroup(NewChannel(), GetSubscriberSpec(Subscriber1(WithFreshSubscriber)))),
+							ConsumerBootstrapServersConfig(ChannelBootstrapServers),
+						),
+						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
+						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
+						ConsumerAuth(&internalscg.Auth{
+							SecretSpec: &internalscg.SecretSpec{
+								Ref: &internalscg.SecretReference{
 									Name:      "secret-1",
-									Version:   SecretResourceVersion,
+									Namespace: "ns-1",
+								},
+							},
+						}),
+					)),
+					ConsumerGroupReplicas(1),
+					ConsumerGroupReady,
+				),
+			},
+			Key: testKey,
+			WantUpdates: []clientgotesting.UpdateActionImpl{
+				ConfigMapUpdate(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, env.ContractConfigMapFormat, &contract.Contract{
+					Generation: 1,
+					Resources: []*contract.Resource{
+						{
+							Uid:              ChannelUUID,
+							Topics:           []string{ChannelTopic()},
+							BootstrapServers: ChannelBootstrapServers,
+							Reference:        ChannelReference(),
+							Auth: &contract.Resource_MultiAuthSecret{
+								MultiAuthSecret: &contract.MultiSecretReference{
+									Protocol: contract.Protocol_SASL_PLAINTEXT,
+									References: []*contract.SecretReference{{
+										Reference: &contract.Reference{
+											Uuid:      SecretUUID,
+											Namespace: "ns-1",
+											Name:      "secret-1",
+											Version:   SecretResourceVersion,
+										},
+										KeyFieldReferences: []*contract.KeyFieldReference{
+											{SecretKey: "password", Field: contract.SecretField_PASSWORD},
+											{SecretKey: "username", Field: contract.SecretField_USER},
+											{SecretKey: "saslType", Field: contract.SecretField_SASL_MECHANISM},
+										},
+									}},
 								},
 							},
 							Ingress: &contract.Ingress{
@@ -1180,6 +1382,80 @@ func TestReconcileKind(t *testing.T) {
 				finalizerUpdatedEvent,
 			},
 		},
+		{
+			Name: "Reconciled normal - with single fresh subscriber - with autoscaling annotations",
+			Objects: []runtime.Object{
+				NewChannel(
+					WithSubscribers(Subscriber1(WithFreshSubscriber)),
+				),
+				NewConfigMapWithTextData(env.SystemNamespace, DefaultEnv.GeneralConfigMapName, map[string]string{
+					kafka.BootstrapServersConfigMapKey: ChannelBootstrapServers,
+				}),
+				NewConfigMapWithBinaryData(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, nil),
+				eventingrekttesting.NewSubscription(Subscription1Name, ChannelNamespace,
+					eventingrekttesting.WithSubscriptionUID(Subscription1UUID),
+					WithAutoscalingAnnotationsSubscription(),
+				),
+			},
+			Key: testKey,
+			WantCreates: []runtime.Object{
+				NewPerChannelService(&env),
+				NewConsumerGroup(
+					WithConsumerGroupName(Subscription1UUID),
+					WithConsumerGroupNamespace(ChannelNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(NewChannel())),
+					WithConsumerGroupMetaLabels(OwnerAsChannelLabel),
+					WithConsumerGroupLabels(ConsumerSubscription1Label),
+					WithConsumerGroupAnnotations(ConsumerGroupAnnotations),
+					ConsumerGroupConsumerSpec(NewConsumerSpec(
+						ConsumerTopics(ChannelTopic()),
+						ConsumerConfigs(
+							ConsumerGroupIdConfig(consumerGroup(NewChannel(), GetSubscriberSpec(Subscriber1(WithFreshSubscriber)))),
+							ConsumerBootstrapServersConfig(ChannelBootstrapServers),
+						),
+						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
+						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
+					)),
+				),
+			},
+			WantUpdates: []clientgotesting.UpdateActionImpl{
+				ConfigMapUpdate(env.DataPlaneConfigMapNamespace, env.ContractConfigMapName, env.ContractConfigMapFormat, &contract.Contract{
+					Generation: 1,
+					Resources: []*contract.Resource{
+						{
+							Uid:              ChannelUUID,
+							Topics:           []string{ChannelTopic()},
+							BootstrapServers: ChannelBootstrapServers,
+							Reference:        ChannelReference(),
+							Ingress: &contract.Ingress{
+								Host: receiver.Host(ChannelNamespace, ChannelName),
+							},
+						},
+					},
+				}),
+			},
+			SkipNamespaceValidation: true, // WantCreates compare the channel namespace with configmap namespace, so skip it
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewChannel(
+						WithInitKafkaChannelConditions,
+						StatusConfigParsed,
+						StatusConfigMapUpdatedReady(&env),
+						StatusTopicReadyWithName(ChannelTopic()),
+						ChannelAddressable(&env),
+						StatusProbeSucceeded,
+						WithSubscribers(Subscriber1(WithUnknownSubscriber)),
+						StatusChannelSubscribersUnknown(),
+					),
+				},
+			},
+			WantPatches: []clientgotesting.PatchActionImpl{
+				patchFinalizers(),
+			},
+			WantEvents: []string{
+				finalizerUpdatedEvent,
+			},
+		},
 		{
 			Name: "Create contract configmap when it does not exist",
 			Objects: []runtime.Object{
@@ -1319,7 +1595,6 @@ func TestReconcileKind(t *testing.T) {
 	}
 
 	table.Test(t, NewFactory(&env, func(ctx context.Context, listers *Listers, env *config.Env, row *TableRow) controller.Reconciler {
-
 		proberMock := probertesting.MockProber(prober.StatusReady)
 		if p, ok := row.OtherTestData[testProber]; ok {
 			proberMock = p.(prober.Prober)
@@ -1359,9 +1634,6 @@ func TestReconcileKind(t *testing.T) {
 				ReceiverLabel:               base.ChannelReceiverLabel,
 			},
 			Env: env,
-			NewKafkaClient: func(addrs []string, config *sarama.Config) (sarama.Client, error) {
-				return &kafkatesting.MockKafkaClient{}, nil
-			},
 			NewKafkaClusterAdminClient: func(_ []string, _ *sarama.Config) (sarama.ClusterAdmin, error) {
 				return &kafkatesting.MockKafkaClusterAdmin{
 					ExpectedTopicName: ChannelTopic(),
@@ -1377,6 +1649,7 @@ func TestReconcileKind(t *testing.T) {
 			},
 			ConfigMapLister:     listers.GetConfigMapLister(),
 			ServiceLister:       listers.GetServiceLister(),
+			SubscriptionLister:  listers.GetSubscriptionLister(),
 			ConsumerGroupLister: listers.GetConsumerGroupLister(),
 			InternalsClient:     fakeconsumergroupinformer.Get(ctx),
 			Prober:              proberMock,
diff --git a/control-plane/pkg/reconciler/channel/v2/controllerv2_test.go b/control-plane/pkg/reconciler/channel/v2/controllerv2_test.go
index 34459582f..f0667104b 100644
--- a/control-plane/pkg/reconciler/channel/v2/controllerv2_test.go
+++ b/control-plane/pkg/reconciler/channel/v2/controllerv2_test.go
@@ -25,6 +25,7 @@ import (
 	fakekubeclientset "k8s.io/client-go/kubernetes/fake"
 
 	_ "knative.dev/eventing-kafka/pkg/client/injection/informers/messaging/v1beta1/kafkachannel/fake"
+	_ "knative.dev/eventing/pkg/client/injection/informers/messaging/v1/subscription/fake"
 	_ "knative.dev/pkg/client/injection/ducks/duck/v1/addressable/fake"
 	fakekubeclient "knative.dev/pkg/client/injection/kube/client/fake"
 	_ "knative.dev/pkg/client/injection/kube/informers/core/v1/configmap/fake"
diff --git a/control-plane/pkg/reconciler/consumergroup/consumergroup_test.go b/control-plane/pkg/reconciler/consumergroup/consumergroup_test.go
index d1bbb2bb8..69b538908 100644
--- a/control-plane/pkg/reconciler/consumergroup/consumergroup_test.go
+++ b/control-plane/pkg/reconciler/consumergroup/consumergroup_test.go
@@ -41,7 +41,6 @@ import (
 	eventingduckv1alpha1 "knative.dev/eventing/pkg/apis/duck/v1alpha1"
 	"knative.dev/eventing/pkg/scheduler"
 
-	eventing "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
 	internals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing"
 	kafkainternals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 	fakekafkainternalsclient "knative.dev/eventing-kafka-broker/control-plane/pkg/client/internals/kafka/injection/client/fake"
@@ -172,9 +171,11 @@ func TestReconcileKind(t *testing.T) {
 							ConsumerGroupIdConfig("my.group.id"),
 						),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: "non-existing secret",
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      "non-existing secret",
+									Namespace: "non-existing secret",
+								}},
 						}),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerVReplicas(1),
@@ -194,9 +195,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: "non-existing secret",
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      "non-existing secret",
+									Namespace: "non-existing secret",
+								}},
 						}),
 					)),
 					ConsumerForTrigger(),
@@ -218,7 +221,7 @@ func TestReconcileKind(t *testing.T) {
 			},
 			WantEvents: []string{
 				finalizerUpdatedEvent,
-				"Warning InternalError failed to initialize consumer group offset: failed to create config options for Kafka cluster auth: failed to get secret test-cg-ns/non-existing secret: secrets \"non-existing secret\" not found",
+				"Warning InternalError failed to initialize consumer group offset: failed to create config options for Kafka cluster auth: failed to get secret non-existing secret/non-existing secret: secrets \"non-existing secret\" not found",
 			},
 			WantCreates: []runtime.Object{},
 			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
@@ -233,16 +236,18 @@ func TestReconcileKind(t *testing.T) {
 								),
 								ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 								ConsumerAuth(&kafkainternals.Auth{
-									AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-										Name: "non-existing secret",
-									}}},
+									SecretSpec: &kafkainternals.SecretSpec{
+										Ref: &kafkainternals.SecretReference{
+											Name:      "non-existing secret",
+											Namespace: "non-existing secret",
+										}},
 								}),
 							)),
 							ConsumerGroupReplicas(2),
 							ConsumerForTrigger(),
 						)
 						cg.InitializeConditions()
-						_ = cg.MarkInitializeOffsetFailed("InitializeOffset", errors.New("failed to create config options for Kafka cluster auth: failed to get secret test-cg-ns/non-existing secret: secrets \"non-existing secret\" not found"))
+						_ = cg.MarkInitializeOffsetFailed("InitializeOffset", errors.New("failed to create config options for Kafka cluster auth: failed to get secret non-existing secret/non-existing secret: secrets \"non-existing secret\" not found"))
 						return cg
 					}(),
 				},
@@ -251,7 +256,7 @@ func TestReconcileKind(t *testing.T) {
 		{
 			Name: "Consumers in multiple pods, propagate consumer not ready condition",
 			Objects: []runtime.Object{
-				NewSSLSecret(ConsumerGroupNamespace, SecretName),
+				NewSSLSecret(SecretNamespace, SecretName),
 				NewConsumer(2,
 					ConsumerSpec(NewConsumerSpec(
 						ConsumerTopics("t1", "t2"),
@@ -261,9 +266,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 						ConsumerVReplicas(1),
 						ConsumerPlacement(kafkainternals.PodBind{
@@ -282,9 +289,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 					)),
 					ConsumerForTrigger(),
@@ -311,9 +320,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 						ConsumerVReplicas(1),
 						ConsumerPlacement(kafkainternals.PodBind{PodName: "p1", PodNamespace: systemNamespace}),
@@ -332,9 +343,11 @@ func TestReconcileKind(t *testing.T) {
 								),
 								ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 								ConsumerAuth(&kafkainternals.Auth{
-									AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-										Name: SecretName,
-									}}},
+									SecretSpec: &kafkainternals.SecretSpec{
+										Ref: &kafkainternals.SecretReference{
+											Name:      SecretName,
+											Namespace: SecretNamespace,
+										}},
 								}),
 							)),
 							ConsumerGroupReplicas(2),
@@ -368,7 +381,7 @@ func TestReconcileKind(t *testing.T) {
 		{
 			Name: "Consumers in multiple pods, with auth spec, one exists - ready",
 			Objects: []runtime.Object{
-				NewSSLSecret(ConsumerGroupNamespace, SecretName),
+				NewSSLSecret(SecretNamespace, SecretName),
 				NewConsumer(2,
 					ConsumerSpec(NewConsumerSpec(
 						ConsumerTopics("t1", "t2"),
@@ -378,9 +391,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 						ConsumerVReplicas(1),
 						ConsumerPlacement(kafkainternals.PodBind{
@@ -399,9 +414,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 					)),
 					ConsumerForTrigger(),
@@ -427,9 +444,11 @@ func TestReconcileKind(t *testing.T) {
 						),
 						ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 						ConsumerAuth(&kafkainternals.Auth{
-							AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-								Name: SecretName,
-							}}},
+							SecretSpec: &kafkainternals.SecretSpec{
+								Ref: &kafkainternals.SecretReference{
+									Name:      SecretName,
+									Namespace: SecretNamespace,
+								}},
 						}),
 						ConsumerVReplicas(1),
 						ConsumerPlacement(kafkainternals.PodBind{PodName: "p1", PodNamespace: systemNamespace}),
@@ -448,9 +467,11 @@ func TestReconcileKind(t *testing.T) {
 								),
 								ConsumerDelivery(NewConsumerSpecDelivery("", ConsumerInitialOffset(sources.OffsetLatest))),
 								ConsumerAuth(&kafkainternals.Auth{
-									AuthSpec: &eventing.Auth{Secret: &eventing.Secret{Ref: &eventing.SecretReference{
-										Name: SecretName,
-									}}},
+									SecretSpec: &kafkainternals.SecretSpec{
+										Ref: &kafkainternals.SecretReference{
+											Name:      SecretName,
+											Namespace: SecretNamespace,
+										}},
 								}),
 							)),
 							ConsumerGroupReplicas(2),
diff --git a/control-plane/pkg/reconciler/testing/objects_broker.go b/control-plane/pkg/reconciler/testing/objects_broker.go
index cb3404deb..8194717e4 100644
--- a/control-plane/pkg/reconciler/testing/objects_broker.go
+++ b/control-plane/pkg/reconciler/testing/objects_broker.go
@@ -194,6 +194,15 @@ func WithBootstrapServerStatusAnnotation(servers string) reconcilertesting.Broke
 	}
 }
 
+func WithSecretStatusAnnotation(name string) reconcilertesting.BrokerOption {
+	return func(broker *eventing.Broker) {
+		if broker.Status.Annotations == nil {
+			broker.Status.Annotations = make(map[string]string, 10)
+		}
+		broker.Status.Annotations[security.AuthSecretNameKey] = name
+	}
+}
+
 func WithAutoscalingAnnotationsTrigger() reconcilertesting.TriggerOption {
 	return func(trigger *eventing.Trigger) {
 		if trigger.Annotations == nil {
diff --git a/control-plane/pkg/reconciler/testing/objects_channel.go b/control-plane/pkg/reconciler/testing/objects_channel.go
index b1937ed6d..e3f23c01e 100644
--- a/control-plane/pkg/reconciler/testing/objects_channel.go
+++ b/control-plane/pkg/reconciler/testing/objects_channel.go
@@ -29,6 +29,7 @@ import (
 	messagingv1beta1 "knative.dev/eventing-kafka/pkg/apis/messaging/v1beta1"
 	"knative.dev/eventing-kafka/pkg/channel/consolidated/reconciler/controller/resources"
 	eventingduckv1 "knative.dev/eventing/pkg/apis/duck/v1"
+	v1 "knative.dev/eventing/pkg/apis/messaging/v1"
 	"knative.dev/pkg/apis"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
 	"knative.dev/pkg/network"
@@ -38,6 +39,8 @@ import (
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/kafka"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/base"
 	. "knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/channel"
+
+	subscriptionv1 "knative.dev/eventing/pkg/reconciler/testing/v1"
 )
 
 const (
@@ -120,6 +123,20 @@ func WithChannelDeadLetterSinkURI(uri string) KRShapedOption {
 	}
 }
 
+func WithAutoscalingAnnotationsSubscription() subscriptionv1.SubscriptionOption {
+	return func(s *v1.Subscription) {
+		if s.Annotations == nil {
+			s.Annotations = make(map[string]string)
+		}
+
+		for k, v := range ConsumerGroupAnnotations {
+			if _, ok := s.Annotations[k]; !ok {
+				s.Annotations[k] = v
+			}
+		}
+	}
+}
+
 func ChannelReceiverPod(namespace string, annotations map[string]string) runtime.Object {
 	return &corev1.Pod{
 		TypeMeta: metav1.TypeMeta{
diff --git a/control-plane/pkg/reconciler/testing/objects_consumer.go b/control-plane/pkg/reconciler/testing/objects_consumer.go
index e254b3723..b5f504007 100644
--- a/control-plane/pkg/reconciler/testing/objects_consumer.go
+++ b/control-plane/pkg/reconciler/testing/objects_consumer.go
@@ -39,7 +39,8 @@ const (
 	ConsumerNamePrefix = "test-cg"
 	ConsumerNamespace  = "test-cg-ns"
 
-	SecretName = "secret-name"
+	SecretName      = "secret-name"
+	SecretNamespace = SystemNamespace
 )
 
 var (
diff --git a/control-plane/pkg/reconciler/trigger/v2/triggerv2_test.go b/control-plane/pkg/reconciler/trigger/v2/triggerv2_test.go
index a800c1754..47a7c65e2 100644
--- a/control-plane/pkg/reconciler/trigger/v2/triggerv2_test.go
+++ b/control-plane/pkg/reconciler/trigger/v2/triggerv2_test.go
@@ -26,6 +26,7 @@ import (
 	eventingduck "knative.dev/eventing/pkg/apis/duck/v1"
 
 	internals "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing"
+	internalscg "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/internals/kafka/eventing/v1alpha1"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/config"
 	"knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/base"
 	brokerreconciler "knative.dev/eventing-kafka-broker/control-plane/pkg/reconciler/broker"
@@ -488,6 +489,88 @@ func TestReconcileKind(t *testing.T) {
 				},
 			},
 		},
+		{
+			Name: "Reconciled normal - with auth - SASL",
+			Objects: []runtime.Object{
+				NewBroker(
+					BrokerReady,
+					WithTopicStatusAnnotation(BrokerTopic()),
+					WithBootstrapServerStatusAnnotation(bootstrapServers),
+					WithSecretStatusAnnotation("secret-1"),
+				),
+				DataPlaneConfigMap(env.DataPlaneConfigMapNamespace, env.DataPlaneConfigConfigMapName, brokerreconciler.ConsumerConfigKey,
+					DataPlaneConfigInitialOffset(brokerreconciler.ConsumerConfigKey, sources.OffsetLatest),
+				),
+				newTrigger(),
+				NewConsumerGroup(
+					WithConsumerGroupName(TriggerUUID),
+					WithConsumerGroupNamespace(triggerNamespace),
+					WithConsumerGroupOwnerRef(kmeta.NewControllerRef(newTrigger())),
+					WithConsumerGroupMetaLabels(OwnerAsTriggerLabel),
+					WithConsumerGroupLabels(ConsumerTriggerLabel),
+					ConsumerGroupConsumerSpec(NewConsumerSpec(
+						ConsumerTopics(ChannelTopic()),
+						ConsumerConfigs(
+							ConsumerGroupIdConfig(TriggerUUID),
+							ConsumerBootstrapServersConfig(bootstrapServers),
+						),
+						ConsumerDelivery(NewConsumerSpecDelivery(internals.Ordered)),
+						ConsumerSubscriber(NewConsumerSpecSubscriber(Subscription1URI)),
+						ConsumerAuth(&internalscg.Auth{
+							SecretSpec: &internalscg.SecretSpec{
+								Ref: &internalscg.SecretReference{
+									Name:      "secret-1",
+									Namespace: ConfigMapNamespace,
+								},
+							},
+						}),
+					)),
+				),
+				NewLegacySASLSecret(ConfigMapNamespace, "secret-1"),
+			},
+			Key: testKey,
+			WantUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: NewConsumerGroup(
+						WithConsumerGroupName(TriggerUUID),
+						WithConsumerGroupNamespace(triggerNamespace),
+						WithConsumerGroupOwnerRef(kmeta.NewControllerRef(newTrigger())),
+						WithConsumerGroupMetaLabels(OwnerAsTriggerLabel),
+						WithConsumerGroupLabels(ConsumerTriggerLabel),
+						ConsumerGroupConsumerSpec(NewConsumerSpec(
+							ConsumerTopics(BrokerTopics[0]),
+							ConsumerConfigs(
+								ConsumerGroupIdConfig(TriggerUUID),
+								ConsumerBootstrapServersConfig(bootstrapServers),
+							),
+							ConsumerDelivery(NewConsumerSpecDelivery(internals.Unordered, ConsumerInitialOffset(sources.OffsetLatest))),
+							ConsumerFilters(NewConsumerSpecFilters()),
+							ConsumerReply(ConsumerTopicReply()),
+							ConsumerAuth(&internalscg.Auth{
+								SecretSpec: &internalscg.SecretSpec{
+									Ref: &internalscg.SecretReference{
+										Name:      "secret-1",
+										Namespace: ConfigMapNamespace,
+									},
+								},
+							}),
+						)),
+					),
+				},
+			},
+			WantStatusUpdates: []clientgotesting.UpdateActionImpl{
+				{
+					Object: newTrigger(
+						reconcilertesting.WithInitTriggerConditions,
+						reconcilertesting.WithTriggerSubscribed(),
+						reconcilertesting.WithTriggerBrokerReady(),
+						withTriggerSubscriberResolvedSucceeded(),
+						reconcilertesting.WithTriggerDependencyUnknown("failed to reconcile consumer group", "consumer group is not ready"),
+						withDeadLetterSinkURI(""),
+					),
+				},
+			},
+		},
 		{
 			Name: "Reconciled normal - existing cg without update",
 			Objects: []runtime.Object{
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/AbstractConsumerVerticleTest.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/AbstractConsumerVerticleTest.java
index cb700ce9e..b846fcf30 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/AbstractConsumerVerticleTest.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/AbstractConsumerVerticleTest.java
@@ -17,12 +17,15 @@ package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
 import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.metrics.Metrics;
+import dev.knative.eventing.kafka.broker.core.testing.CoreObjects;
 import dev.knative.eventing.kafka.broker.dispatcher.CloudEventSender;
 import dev.knative.eventing.kafka.broker.dispatcher.CloudEventSenderMock;
 import dev.knative.eventing.kafka.broker.dispatcher.ResponseHandlerMock;
 import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherImpl;
 import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherTest;
 import dev.knative.eventing.kafka.broker.dispatcher.impl.ResourceContext;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
+import dev.knative.eventing.kafka.broker.dispatcher.main.FakeConsumerVerticleContext;
 import io.cloudevents.CloudEvent;
 import io.vertx.core.AsyncResult;
 import io.vertx.core.Future;
@@ -47,6 +50,8 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
+import static dev.knative.eventing.kafka.broker.core.testing.CoreObjects.*;
+import static dev.knative.eventing.kafka.broker.core.testing.CoreObjects.resource1;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Awaitility.await;
 import static org.mockito.ArgumentMatchers.any;
@@ -82,14 +87,20 @@ public abstract class AbstractConsumerVerticleTest {
     );
     final var topic = "topic1";
 
+    final var consumerVerticleContext = FakeConsumerVerticleContext.get(
+      DataPlaneContract.Resource.newBuilder(resource1()).clearTopics().addTopics(topic).build(),
+      egress1()
+    );
+
     final var verticle = createConsumerVerticle(
+      consumerVerticleContext,
       (vx, consumerVerticle) -> {
         consumerVerticle.setConsumer(KafkaConsumer.create(vx, consumer));
         consumerVerticle.setRecordDispatcher(recordDispatcher);
         consumerVerticle.setCloser(Future::succeededFuture);
 
         return Future.succeededFuture();
-      }, Set.of(topic)
+      }
     );
 
     final Promise<String> promise = Promise.promise();
@@ -120,13 +131,17 @@ public abstract class AbstractConsumerVerticleTest {
     final var topic = "topic1";
 
     final var verticle = createConsumerVerticle(
+      FakeConsumerVerticleContext.get(
+        DataPlaneContract.Resource.newBuilder(resource1()).clearTopics().addTopics(topic).build(),
+        egress1()
+      ),
       (vx, consumerVerticle) -> {
         consumerVerticle.setConsumer(KafkaConsumer.create(vx, consumer));
         consumerVerticle.setRecordDispatcher(recordDispatcher);
         consumerVerticle.setCloser(Future::succeededFuture);
 
         return Future.succeededFuture();
-      }, Set.of(topic)
+      }
     );
 
     final Promise<String> deployPromise = Promise.promise();
@@ -139,7 +154,8 @@ public abstract class AbstractConsumerVerticleTest {
       .onFailure(context::failNow);
 
     undeployPromise.future()
-      .onSuccess(ignored -> {})
+      .onSuccess(ignored -> {
+      })
       .onFailure(context::failNow);
 
     await().untilAsserted(() -> assertThat(consumer.closed()).isTrue());
@@ -212,13 +228,14 @@ public abstract class AbstractConsumerVerticleTest {
     );
 
     final var verticle = createConsumerVerticle(
+      FakeConsumerVerticleContext.get(),
       (vx, consumerVerticle) -> {
         consumerVerticle.setConsumer(consumer);
         consumerVerticle.setRecordDispatcher(recordDispatcher);
         consumerVerticle.setCloser(Future::succeededFuture);
 
         return Future.succeededFuture();
-      }, Set.of(topics)
+      }
     );
 
     vertx.deployVerticle(verticle)
@@ -238,7 +255,7 @@ public abstract class AbstractConsumerVerticleTest {
     checkpoints.flag();
   }
 
-  abstract BaseConsumerVerticle createConsumerVerticle(BaseConsumerVerticle.Initializer initializer,
-                                                       Set<String> topics);
+  abstract ConsumerVerticle createConsumerVerticle(final ConsumerVerticleContext context,
+                                                   final ConsumerVerticle.Initializer initializer);
 
 }
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticleTest.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticleTest.java
index cb1d30aa1..5aca16d2d 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticleTest.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/OrderedConsumerVerticleTest.java
@@ -16,9 +16,11 @@
 package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
 import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+import dev.knative.eventing.kafka.broker.core.testing.CoreObjects;
 import dev.knative.eventing.kafka.broker.dispatcher.impl.RecordDispatcherImpl;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
+import dev.knative.eventing.kafka.broker.dispatcher.main.FakeConsumerVerticleContext;
 import io.cloudevents.CloudEvent;
-import io.micrometer.core.instrument.MeterRegistry;
 import io.vertx.core.Future;
 import io.vertx.core.Promise;
 import io.vertx.core.Vertx;
@@ -40,7 +42,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
-import java.util.Set;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -107,19 +108,17 @@ public class OrderedConsumerVerticleTest extends AbstractConsumerVerticleTest {
     when(recordDispatcher.close()).thenReturn(Future.succeededFuture());
 
     final var verticle = createConsumerVerticle(
-      DataPlaneContract.Egress.newBuilder()
-        .setFeatureFlags(DataPlaneContract.EgressFeatureFlags.newBuilder()
-          .setEnableRateLimiter(rateLimiterEnabled)
-          .build())
-        .build(),
+      FakeConsumerVerticleContext.get(
+        DataPlaneContract.Resource.newBuilder(CoreObjects.resource1()).clearTopics().addTopics(topic).build(),
+        CoreObjects.egress1()
+      ),
       (vx, consumerVerticle) -> {
         consumerVerticle.setConsumer(KafkaConsumer.create(vx, consumer));
         consumerVerticle.setRecordDispatcher(recordDispatcher);
         consumerVerticle.setCloser(Future::succeededFuture);
 
         return Future.succeededFuture();
-      }, Set.of(topic),
-      null
+      }
     );
 
     // Deploy the verticle
@@ -183,17 +182,9 @@ public class OrderedConsumerVerticleTest extends AbstractConsumerVerticleTest {
     ).isEqualTo(tasks);
   }
 
-  @Override
-  BaseConsumerVerticle createConsumerVerticle(final BaseConsumerVerticle.Initializer initializer,
-                                              final Set<String> topics) {
-    return createConsumerVerticle(DataPlaneContract.Egress.newBuilder().build(), initializer, topics, null);
-  }
-
-  BaseConsumerVerticle createConsumerVerticle(final DataPlaneContract.Egress egress,
-                                              final BaseConsumerVerticle.Initializer initializer,
-                                              final Set<String> topics,
-                                              final MeterRegistry meterRegistry) {
-    return new OrderedConsumerVerticle(egress, initializer, topics, 2, meterRegistry);
+  ConsumerVerticle createConsumerVerticle(final ConsumerVerticleContext context,
+                                          final ConsumerVerticle.Initializer initializer) {
+    return new OrderedConsumerVerticle(context, initializer);
   }
 
   protected static ConsumerRecord<Object, CloudEvent> record(String topic, int partition, long offset) {
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticleTest.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticleTest.java
index fa4143632..720e4ca0d 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticleTest.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/impl/consumer/UnorderedConsumerVerticleTest.java
@@ -15,13 +15,15 @@
  */
 package dev.knative.eventing.kafka.broker.dispatcher.impl.consumer;
 
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
+
 import java.util.Set;
 
 public class UnorderedConsumerVerticleTest extends AbstractConsumerVerticleTest {
 
   @Override
-  BaseConsumerVerticle createConsumerVerticle(
-    BaseConsumerVerticle.Initializer initializer, Set<String> topics) {
-    return new UnorderedConsumerVerticle(initializer, topics, 5);
+  ConsumerVerticle createConsumerVerticle(final ConsumerVerticleContext context,
+                                          final ConsumerVerticle.Initializer initializer) {
+    return new UnorderedConsumerVerticle(context, initializer);
   }
 }
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/ConsumerVerticleFactoryImplMock.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/ConsumerVerticleFactoryImplMock.java
index 9c1f2a84f..33481fc94 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/ConsumerVerticleFactoryImplMock.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/ConsumerVerticleFactoryImplMock.java
@@ -15,15 +15,24 @@
  */
 package dev.knative.eventing.kafka.broker.dispatcher.integration;
 
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
 import dev.knative.eventing.kafka.broker.core.metrics.Metrics;
 import dev.knative.eventing.kafka.broker.core.security.AuthProvider;
+import dev.knative.eventing.kafka.broker.dispatcher.ConsumerVerticleFactory;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerFactory;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleBuilder;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleContext;
 import dev.knative.eventing.kafka.broker.dispatcher.main.ConsumerVerticleFactoryImpl;
+import dev.knative.eventing.kafka.broker.dispatcher.main.FakeConsumerVerticleContext;
+import dev.knative.eventing.kafka.broker.dispatcher.main.ProducerFactory;
 import io.cloudevents.CloudEvent;
+import io.vertx.core.AbstractVerticle;
 import io.vertx.core.Vertx;
 import io.vertx.ext.web.client.WebClientOptions;
 import io.vertx.kafka.client.consumer.KafkaConsumer;
 import io.vertx.kafka.client.producer.KafkaProducer;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -40,7 +49,7 @@ import org.apache.kafka.common.serialization.StringSerializer;
 
 import static org.mockito.Mockito.mock;
 
-public class ConsumerVerticleFactoryImplMock extends ConsumerVerticleFactoryImpl {
+public class ConsumerVerticleFactoryImplMock implements ConsumerVerticleFactory {
 
   // trigger.id() -> Mock*er
   private final Map<String, MockProducer<String, CloudEvent>> mockProducer;
@@ -48,23 +57,13 @@ public class ConsumerVerticleFactoryImplMock extends ConsumerVerticleFactoryImpl
 
   private List<ConsumerRecord<String, CloudEvent>> records;
 
-  public ConsumerVerticleFactoryImplMock(
-    final Properties consumerConfigs,
-    final Properties producerConfigs) {
-    super(
-      consumerConfigs,
-      new WebClientOptions(),
-      producerConfigs,
-      AuthProvider.noAuth(),
-      Metrics.getRegistry()
-    );
+  public ConsumerVerticleFactoryImplMock() {
     mockProducer = new ConcurrentHashMap<>();
     mockConsumer = new ConcurrentHashMap<>();
   }
 
-  @Override
-  protected KafkaProducer<String, CloudEvent> createProducer(Vertx vertx,
-                                                             Map<String, Object> producerConfigs) {
+  private KafkaProducer<String, CloudEvent> createProducer(Vertx vertx,
+                                                           Map<String, Object> producerConfigs) {
     return KafkaProducer.create(vertx, new MockProducer<>(
       true,
       new StringSerializer(),
@@ -72,9 +71,8 @@ public class ConsumerVerticleFactoryImplMock extends ConsumerVerticleFactoryImpl
     ));
   }
 
-  @Override
-  protected KafkaConsumer<Object, CloudEvent> createConsumer(Vertx vertx,
-                                                             Map<String, Object> consumerConfigs) {
+  private KafkaConsumer<Object, CloudEvent> createConsumer(Vertx vertx,
+                                                           Map<String, Object> consumerConfigs) {
     final var consumer = new MockConsumer<Object, CloudEvent>(OffsetResetStrategy.LATEST);
 
     consumer.schedulePollTask(() -> {
@@ -117,4 +115,14 @@ public class ConsumerVerticleFactoryImplMock extends ConsumerVerticleFactoryImpl
   Map<String, MockConsumer<String, CloudEvent>> consumers() {
     return mockConsumer;
   }
+
+  @Override
+  public AbstractVerticle get(DataPlaneContract.Resource resource, DataPlaneContract.Egress egress) {
+    return new ConsumerVerticleBuilder(
+      FakeConsumerVerticleContext.get(resource, egress)
+        .withConsumerFactory(this::createConsumer)
+        .withProducerFactory(this::createProducer)
+    )
+      .build();
+  }
 }
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/UnorderedConsumerTest.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/UnorderedConsumerTest.java
index 80122f75f..b48ebf1ef 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/UnorderedConsumerTest.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/integration/UnorderedConsumerTest.java
@@ -32,18 +32,7 @@ import io.vertx.junit5.VertxExtension;
 import io.vertx.junit5.VertxTestContext;
 import io.vertx.micrometer.MicrometerMetricsOptions;
 import io.vertx.micrometer.backends.BackendRegistries;
-import java.net.URI;
-import java.nio.file.Files;
-import java.util.Arrays;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import org.apache.kafka.clients.consumer.ConsumerConfig;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
-import org.apache.kafka.clients.consumer.StickyAssignor;
 import org.apache.kafka.clients.consumer.OffsetAndMetadata;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.common.TopicPartition;
@@ -52,6 +41,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.net.URI;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
 import static dev.knative.eventing.kafka.broker.core.file.FileWatcherTest.write;
 import static dev.knative.eventing.kafka.broker.core.testing.CoreObjects.contract;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -73,15 +70,7 @@ public class UnorderedConsumerTest {
   public void testUnorderedConsumer(final Vertx vertx) throws Exception {
     ContractMessageCodec.register(vertx.eventBus());
 
-    final var producerConfigs = new Properties();
-    final var consumerConfigs = new Properties();
-    consumerConfigs.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, 100L);
-    consumerConfigs.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, StickyAssignor.class.getName());
-
-    final var consumerVerticleFactoryMock = new ConsumerVerticleFactoryImplMock(
-      consumerConfigs,
-      producerConfigs
-    );
+    final var consumerVerticleFactoryMock = new ConsumerVerticleFactoryImplMock();
 
     final var event = new CloudEventBuilder()
       .withType("dev.knative")
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImplTest.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImplTest.java
index d02c999b7..a39232271 100644
--- a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImplTest.java
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/ConsumerVerticleFactoryImplTest.java
@@ -27,14 +27,12 @@ import io.micrometer.core.instrument.MeterRegistry;
 import io.vertx.ext.web.client.WebClientOptions;
 import io.vertx.micrometer.MicrometerMetricsOptions;
 import io.vertx.micrometer.backends.BackendRegistries;
-
 import org.apache.kafka.clients.consumer.StickyAssignor;
 import org.apache.kafka.common.serialization.StringDeserializer;
 import org.apache.kafka.common.serialization.StringSerializer;
 import org.junit.jupiter.api.Test;
 
 import java.util.Properties;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.kafka.clients.consumer.ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG;
 import static org.apache.kafka.clients.consumer.ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG;
@@ -43,7 +41,6 @@ import static org.apache.kafka.clients.consumer.ConsumerConfig.VALUE_DESERIALIZE
 import static org.apache.kafka.clients.producer.ProducerConfig.INTERCEPTOR_CLASSES_CONFIG;
 import static org.apache.kafka.clients.producer.ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG;
 import static org.apache.kafka.clients.producer.ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.mockito.Mockito.mock;
 
@@ -185,96 +182,4 @@ public class ConsumerVerticleFactoryImplTest {
 
     assertDoesNotThrow(() -> verticleFactory.get(resource, egress));
   }
-
-  @Test
-  public void getNoopResponseHandler() {
-    final var kafkaCounter = new AtomicInteger(0);
-    final var httpCounter = new AtomicInteger(0);
-    final var egress = DataPlaneContract.Egress.newBuilder()
-      .setDiscardReply(DataPlaneContract.Empty.newBuilder().build())
-      .build();
-
-    final var r = ConsumerVerticleFactoryImpl.getResponseHandler(egress,
-      () -> {
-        kafkaCounter.incrementAndGet();
-        return null;
-      },
-      () -> {
-        httpCounter.incrementAndGet();
-        return null;
-      });
-
-    assertThat(r).isNotNull();
-    assertThat(kafkaCounter.get()).isEqualTo(0);
-    assertThat(httpCounter.get()).isEqualTo(0);
-  }
-
-  @Test
-  public void getKafkaResponseHandler() {
-    final var kafkaCounter = new AtomicInteger(0);
-    final var httpCounter = new AtomicInteger(0);
-
-    final var egress = DataPlaneContract.Egress.newBuilder()
-      .setReplyToOriginalTopic(DataPlaneContract.Empty.newBuilder().build())
-      .build();
-
-    final var r = ConsumerVerticleFactoryImpl.getResponseHandler(egress,
-      () -> {
-        kafkaCounter.incrementAndGet();
-        return null;
-      },
-      () -> {
-        httpCounter.incrementAndGet();
-        return null;
-      });
-
-    assertThat(r).isNull();
-    assertThat(kafkaCounter.get()).isEqualTo(1);
-    assertThat(httpCounter.get()).isEqualTo(0);
-  }
-
-  @Test
-  public void getHttpResponseHandler() {
-    final var kafkaCounter = new AtomicInteger(0);
-    final var httpCounter = new AtomicInteger(0);
-
-    final var egress = DataPlaneContract.Egress.newBuilder()
-      .setReplyUrl("http://foo.bar")
-      .build();
-
-    final var r = ConsumerVerticleFactoryImpl.getResponseHandler(egress,
-      () -> {
-        kafkaCounter.incrementAndGet();
-        return null;
-      },
-      () -> {
-        httpCounter.incrementAndGet();
-        return null;
-      });
-
-    assertThat(r).isNull();
-    assertThat(kafkaCounter.get()).isEqualTo(0);
-    assertThat(httpCounter.get()).isEqualTo(1);
-  }
-
-  @Test
-  public void getShouldBackToNoopResponseHandlerIfNothingSet() {
-    final var kafkaCounter = new AtomicInteger(0);
-    final var httpCounter = new AtomicInteger(0);
-    final var egress = DataPlaneContract.Egress.newBuilder().build();
-
-    final var r = ConsumerVerticleFactoryImpl.getResponseHandler(egress,
-      () -> {
-        kafkaCounter.incrementAndGet();
-        return null;
-      },
-      () -> {
-        httpCounter.incrementAndGet();
-        return null;
-      });
-
-    assertThat(r).isNull();
-    assertThat(kafkaCounter.get()).isEqualTo(1);
-    assertThat(httpCounter.get()).isEqualTo(0);
-  }
 }
diff --git a/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/FakeConsumerVerticleContext.java b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/FakeConsumerVerticleContext.java
new file mode 100644
index 000000000..75c339b93
--- /dev/null
+++ b/data-plane/dispatcher/src/test/java/dev/knative/eventing/kafka/broker/dispatcher/main/FakeConsumerVerticleContext.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright © 2018 Knative Authors (knative-dev@googlegroups.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package dev.knative.eventing.kafka.broker.dispatcher.main;
+
+import dev.knative.eventing.kafka.broker.contract.DataPlaneContract;
+import dev.knative.eventing.kafka.broker.core.security.AuthProvider;
+import dev.knative.eventing.kafka.broker.core.testing.CoreObjects;
+import io.vertx.ext.web.client.WebClientOptions;
+
+import java.util.HashMap;
+
+public class FakeConsumerVerticleContext {
+
+  public static ConsumerVerticleContext get() {
+    return new ConsumerVerticleContext()
+      .withProducerConfigs(new HashMap<>())
+      .withConsumerConfigs(new HashMap<>())
+      .withResource(CoreObjects.resource1(), CoreObjects.egress1());
+  }
+
+  public static ConsumerVerticleContext get(final DataPlaneContract.Resource resource, final DataPlaneContract.Egress egress) {
+    return new ConsumerVerticleContext()
+      .withProducerConfigs(new HashMap<>())
+      .withConsumerConfigs(new HashMap<>())
+      .withAuthProvider(AuthProvider.noAuth())
+      .withWebClientOptions(new WebClientOptions())
+      .withResource(resource, egress);
+  }
+}
diff --git a/test/e2e-common.sh b/test/e2e-common.sh
index 0123f2be5..3b92f2aae 100644
--- a/test/e2e-common.sh
+++ b/test/e2e-common.sh
@@ -253,7 +253,7 @@ function scale_controlplane() {
     # Scale up components for HA tests
     kubectl -n knative-eventing scale deployment "$deployment" --replicas="${REPLICAS}" || fail_test "Failed to scale up to ${REPLICAS} ${deployment}"
     # Wait for the deployment to be available
-    kubectl -n knative-eventing wait deployment "$deployment" --for condition=Available=True --timeout=180s
+    kubectl -n knative-eventing wait deployment "$deployment" --for condition=Available=True --timeout=600s || fail_test "Failed to scale up to ${REPLICAS} ${deployment}"
   done
 }
 
diff --git a/test/e2e_broker/broker_redelivery_test.go b/test/e2e_broker/broker_redelivery_test.go
index ce97f7d8b..6b177d974 100644
--- a/test/e2e_broker/broker_redelivery_test.go
+++ b/test/e2e_broker/broker_redelivery_test.go
@@ -47,6 +47,7 @@ func TestBrokerRedeliveryBrokerV1BackoffLinear(t *testing.T) {
 			brokertest.CreatorWithBrokerOptions(
 				client,
 				"v1",
+				brokertest.WithBrokerClassFromEnvVar,
 				resources.WithDeliveryForBroker(&eventingduck.DeliverySpec{
 					Retry:         &numRetries,
 					BackoffPolicy: &backoff,
@@ -69,6 +70,7 @@ func TestBrokerRedeliveryBrokerV1BackoffExponential(t *testing.T) {
 			brokertest.CreatorWithBrokerOptions(
 				client,
 				"v1",
+				brokertest.WithBrokerClassFromEnvVar,
 				resources.WithDeliveryForBroker(&eventingduck.DeliverySpec{
 					Retry:         &numRetries,
 					BackoffPolicy: &backoff,
diff --git a/test/e2e_broker/broker_trigger_test.go b/test/e2e_broker/broker_trigger_test.go
index 8128c3cd4..0191e4b23 100644
--- a/test/e2e_broker/broker_trigger_test.go
+++ b/test/e2e_broker/broker_trigger_test.go
@@ -188,11 +188,17 @@ func TestBrokerWithConfig(t *testing.T) {
 
 		eventId := uuid.New().String()
 
-		brokerName := brokertest.CreatorWithConfigOptions(client, "v1", func(data map[string]string) {
-			data[kafka.DefaultTopicNumPartitionConfigMapKey] = fmt.Sprintf("%d", numPartitions)
-			data[kafka.DefaultTopicReplicationFactorConfigMapKey] = fmt.Sprintf("%d", replicationFactor)
-			data[kafka.BootstrapServersConfigMapKey] = testingpkg.BootstrapServersPlaintext
-		})
+		brokerName := brokertest.CreatorWithOptions(client, "v1",
+			[]resources.BrokerOption{
+				brokertest.WithBrokerClassFromEnvVar,
+			},
+			[]brokertest.ConfigOptions{
+				func(data map[string]string) {
+					data[kafka.DefaultTopicNumPartitionConfigMapKey] = fmt.Sprintf("%d", numPartitions)
+					data[kafka.DefaultTopicReplicationFactorConfigMapKey] = fmt.Sprintf("%d", replicationFactor)
+					data[kafka.BootstrapServersConfigMapKey] = testingpkg.BootstrapServersPlaintext
+				},
+			})
 
 		eventTracker, _ := recordevents.StartEventRecordOrFail(ctx, client, subscriber)
 
diff --git a/test/e2e_broker/conformance/control_plane_conformance_test.go b/test/e2e_broker/conformance/control_plane_conformance_test.go
index 3ff7983ae..25cb7693f 100644
--- a/test/e2e_broker/conformance/control_plane_conformance_test.go
+++ b/test/e2e_broker/conformance/control_plane_conformance_test.go
@@ -34,6 +34,7 @@ func brokerCreator(client *testlib.Client, name string) {
 	brokertest.CreatorWithBrokerOptions(
 		client,
 		"v1",
+		brokertest.WithBrokerClassFromEnvVar,
 		func(b *eventing.Broker) {
 			b.Name = name
 		},
diff --git a/test/pkg/broker/broker.go b/test/pkg/broker/broker.go
index f88cd1016..0b5381d20 100644
--- a/test/pkg/broker/broker.go
+++ b/test/pkg/broker/broker.go
@@ -25,6 +25,7 @@ import (
 	corev1 "k8s.io/api/core/v1"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	eventingv1 "knative.dev/eventing/pkg/apis/eventing/v1"
 	eventingtestlib "knative.dev/eventing/test/lib"
 	"knative.dev/eventing/test/lib/resources"
 	duckv1 "knative.dev/pkg/apis/duck/v1"
@@ -50,26 +51,33 @@ func GetKafkaClassFromEnv() (string, error) {
 	return val, nil
 }
 
-func Creator(client *eventingtestlib.Client, version string) string {
-	return CreatorWithConfigOptions(client, version)
+func WithBrokerClassFromEnvVar(b *eventingv1.Broker) {
+	class, err := GetKafkaClassFromEnv()
+	if err != nil {
+		panic(fmt.Sprintf("error getting KafkaBroker class from env '%v'", err))
+	}
+	resources.WithBrokerClassForBroker(class)(b)
 }
 
-type ConfigOptions func(data map[string]string)
+// Creator creates a Broker with the class that is specified in an environment variable.
+func Creator(client *eventingtestlib.Client, version string) string {
+	return CreatorWithBrokerOptions(client, version, WithBrokerClassFromEnvVar)
+}
 
-func CreatorWithConfigOptions(client *eventingtestlib.Client, version string, configOptions ...ConfigOptions) string {
-	return CreatorWithOptions(client, version, []resources.BrokerOption{}, configOptions)
+// CreatorForClass creates a Broker with the given class.
+func CreatorForClass(class string) func(*eventingtestlib.Client, string) string {
+	return func(client *eventingtestlib.Client, version string) string {
+		return CreatorWithBrokerOptions(client, version, resources.WithBrokerClassForBroker(class))
+	}
 }
 
+type ConfigOptions func(data map[string]string)
+
 func CreatorWithBrokerOptions(client *eventingtestlib.Client, version string, brokerOptions ...resources.BrokerOption) string {
 	return CreatorWithOptions(client, version, brokerOptions, []ConfigOptions{})
 }
 
 func CreatorWithOptions(client *eventingtestlib.Client, version string, brokerOptions []resources.BrokerOption, configOptions []ConfigOptions) string {
-	class, err := GetKafkaClassFromEnv()
-	if err != nil {
-		panic(fmt.Sprintf("error getting KafkaBroker class from env '%v'", err))
-	}
-
 	name := "broker"
 
 	version = strings.ToLower(version)
@@ -100,7 +108,6 @@ func CreatorWithOptions(client *eventingtestlib.Client, version string, brokerOp
 		}
 
 		brokerOptions = append(brokerOptions,
-			resources.WithBrokerClassForBroker(class),
 			resources.WithConfigForBroker(&duckv1.KReference{
 				Kind:       "ConfigMap",
 				Namespace:  namespace,
diff --git a/test/upgrade-tests.sh b/test/upgrade-tests.sh
index f47a4df8a..4fef2a0c8 100755
--- a/test/upgrade-tests.sh
+++ b/test/upgrade-tests.sh
@@ -42,9 +42,6 @@ set -Eeuo pipefail
 TIMEOUT=${TIMEOUT:-100m}
 GO_TEST_VERBOSITY="${GO_TEST_VERBOSITY:-standard-verbose}"
 
-# TODO: we don't support upgrade tests for namespaced KafkaBroker right now
-export BROKER_CLASS="Kafka"
-
 EVENTING_KAFKA_BROKER_UPGRADE_TESTS_FINISHEDSLEEP="5m" \
 go_test_e2e -v \
   -tags=upgrade \
diff --git a/test/upgrade/continual.go b/test/upgrade/continual.go
index 6f1c62e82..71e4c5a8c 100644
--- a/test/upgrade/continual.go
+++ b/test/upgrade/continual.go
@@ -21,11 +21,14 @@ import (
 
 	"knative.dev/eventing-kafka-broker/test/upgrade/continual"
 	eventingkafkacontinual "knative.dev/eventing-kafka/test/upgrade/continual"
+
+	"knative.dev/eventing-kafka-broker/control-plane/pkg/kafka"
 )
 
 // ContinualTests returns all continual tests.
 func ContinualTests() []pkgupgrade.BackgroundOperation {
 	c := BrokerContinualTests()
+	c = append(c, NamespacedBrokerContinualTests()...)
 	c = append(c, ChannelContinualTests()...)
 	c = append(c, SinkContinualTests()...)
 	return c
@@ -36,7 +39,29 @@ func ContinualTests() []pkgupgrade.BackgroundOperation {
 // process asserting that all events are propagated.
 func BrokerContinualTests() []pkgupgrade.BackgroundOperation {
 	return []pkgupgrade.BackgroundOperation{
-		continual.BrokerTest(continual.KafkaBrokerTestOptions{}),
+		continual.BrokerTest(continual.KafkaBrokerTestOptions{
+			Broker: &continual.Broker{
+				Name:  "broker-upgrade",
+				Class: kafka.BrokerClass,
+			},
+			Triggers: &continual.Triggers{
+				Prefix: "trigger-upgrade",
+			},
+		}),
+	}
+}
+
+func NamespacedBrokerContinualTests() []pkgupgrade.BackgroundOperation {
+	return []pkgupgrade.BackgroundOperation{
+		continual.BrokerTest(continual.KafkaBrokerTestOptions{
+			Broker: &continual.Broker{
+				Name:  "namespaced-broker-upgrade",
+				Class: kafka.NamespacedBrokerClass,
+			},
+			Triggers: &continual.Triggers{
+				Prefix: "namespaced-trigger-upgrade",
+			},
+		}),
 	}
 }
 
diff --git a/test/upgrade/continual/broker.go b/test/upgrade/continual/broker.go
index 46d27f0b1..2a1afa0a6 100644
--- a/test/upgrade/continual/broker.go
+++ b/test/upgrade/continual/broker.go
@@ -60,19 +60,27 @@ func (o *KafkaBrokerTestOptions) setDefaults() {
 	}
 	if o.Broker == nil {
 		o.Broker = &Broker{
-			Name:               "broker-upgrade",
-			ReplicationOptions: defaultReplicationOptions(),
-			RetryOptions:       defaultRetryOptions(),
+			Name:  "broker-upgrade",
+			Class: kafka.BrokerClass,
 		}
 	}
+	if o.Broker.ReplicationOptions == nil {
+		o.Broker.ReplicationOptions = defaultReplicationOptions()
+	}
+	if o.RetryOptions == nil {
+		o.Broker.RetryOptions = defaultRetryOptions()
+	}
 	if o.Triggers == nil {
 		o.Triggers = &Triggers{
-			Prefix: "trigger-upgrade",
-			Triggers: sut.Triggers{
-				Types: eventTypes,
-			},
+			Triggers: sut.Triggers{},
 		}
 	}
+	if o.Triggers.Prefix == "" {
+		o.Triggers.Prefix = "trigger-upgrade"
+	}
+	if o.Triggers.Types == nil {
+		o.Triggers.Types = eventTypes
+	}
 }
 
 func defaultRetryOptions() *eventingkafkaupgrade.RetryOptions {
@@ -140,7 +148,7 @@ func (k kafkaBrokerSut) deployBroker(ctx sut.Context) {
 			Name:       cm.GetName(),
 			APIVersion: "v1",
 		}),
-		resources.WithBrokerClassForBroker(kafka.BrokerClass),
+		resources.WithBrokerClassForBroker(k.Broker.Class),
 		resources.WithDeliveryForBroker(&eventingduckv1.DeliverySpec{
 			Retry:         pointer.Int32Ptr(int32(k.RetryCount)),
 			BackoffPolicy: &k.BackoffPolicy,
diff --git a/test/upgrade/continual/types.go b/test/upgrade/continual/types.go
index 3c9450efa..ccf8cd95b 100644
--- a/test/upgrade/continual/types.go
+++ b/test/upgrade/continual/types.go
@@ -37,7 +37,8 @@ type Triggers struct {
 }
 
 type Broker struct {
-	Name string
+	Name  string
+	Class string
 	*eventingkafkaupgrade.ReplicationOptions
 	*eventingkafkaupgrade.RetryOptions
 }
diff --git a/test/upgrade/postdowngrade.go b/test/upgrade/postdowngrade.go
index c24d666a5..9c049daa1 100644
--- a/test/upgrade/postdowngrade.go
+++ b/test/upgrade/postdowngrade.go
@@ -21,6 +21,7 @@ import (
 	pkgupgrade "knative.dev/pkg/test/upgrade"
 
 	eventing "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
+	"knative.dev/eventing-kafka-broker/control-plane/pkg/kafka"
 	"knative.dev/eventing-kafka-broker/test/e2e_sink"
 )
 
@@ -28,7 +29,15 @@ import (
 // downgrade.
 func BrokerPostDowngradeTest() pkgupgrade.Operation {
 	return pkgupgrade.NewOperation("BrokerPostDowngradeTest", func(c pkgupgrade.Context) {
-		runBrokerSmokeTest(c.T)
+		runBrokerSmokeTest(c.T, kafka.BrokerClass)
+	})
+}
+
+// NamespacedBrokerPostDowngradeTest tests basic namespaced broker operations after
+// downgrade.
+func NamespacedBrokerPostDowngradeTest() pkgupgrade.Operation {
+	return pkgupgrade.NewOperation("NamespacedBrokerPostDowngradeTest", func(c pkgupgrade.Context) {
+		runBrokerSmokeTest(c.T, kafka.NamespacedBrokerClass)
 	})
 }
 
diff --git a/test/upgrade/postupgrade.go b/test/upgrade/postupgrade.go
index ae30bf46d..a2436db01 100644
--- a/test/upgrade/postupgrade.go
+++ b/test/upgrade/postupgrade.go
@@ -31,6 +31,7 @@ import (
 	pkgupgrade "knative.dev/pkg/test/upgrade"
 
 	eventing "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
+	"knative.dev/eventing-kafka-broker/control-plane/pkg/kafka"
 	"knative.dev/eventing-kafka-broker/test/e2e_sink"
 	eventingkafkaupgrade "knative.dev/eventing-kafka/test/upgrade"
 )
@@ -43,7 +44,20 @@ func BrokerPostUpgradeTest() pkgupgrade.Operation {
 			verifyPostInstall(t)
 		})
 		c.T.Run("tests", func(t *testing.T) {
-			runBrokerSmokeTest(t)
+			runBrokerSmokeTest(t, kafka.BrokerClass)
+		})
+	})
+}
+
+// NamespacedBrokerPostUpgradeTest tests channel operations after upgrade.
+func NamespacedBrokerPostUpgradeTest() pkgupgrade.Operation {
+	return pkgupgrade.NewOperation("NamespacedBrokerPostUpgradeTest", func(c pkgupgrade.Context) {
+		c.T.Parallel()
+		c.T.Run("Verify post-install", func(t *testing.T) {
+			verifyPostInstall(t)
+		})
+		c.T.Run("tests", func(t *testing.T) {
+			runBrokerSmokeTest(t, kafka.NamespacedBrokerClass)
 		})
 	})
 }
diff --git a/test/upgrade/preupgrade.go b/test/upgrade/preupgrade.go
index 1fabfb5c6..c977d6339 100644
--- a/test/upgrade/preupgrade.go
+++ b/test/upgrade/preupgrade.go
@@ -20,6 +20,7 @@ import (
 	pkgupgrade "knative.dev/pkg/test/upgrade"
 
 	eventing "knative.dev/eventing-kafka-broker/control-plane/pkg/apis/eventing/v1alpha1"
+	"knative.dev/eventing-kafka-broker/control-plane/pkg/kafka"
 	"knative.dev/eventing-kafka-broker/test/e2e_sink"
 	eventingkafkaupgrade "knative.dev/eventing-kafka/test/upgrade"
 )
@@ -27,7 +28,14 @@ import (
 // BrokerPreUpgradeTest tests broker basic operations before upgrade.
 func BrokerPreUpgradeTest() pkgupgrade.Operation {
 	return pkgupgrade.NewOperation("BrokerPreUpgradeTest", func(c pkgupgrade.Context) {
-		runBrokerSmokeTest(c.T)
+		runBrokerSmokeTest(c.T, kafka.BrokerClass)
+	})
+}
+
+// NamespacedBrokerPreUpgradeTest tests broker basic operations before upgrade.
+func NamespacedBrokerPreUpgradeTest() pkgupgrade.Operation {
+	return pkgupgrade.NewOperation("NamespacedBrokerPreUpgradeTest", func(c pkgupgrade.Context) {
+		runBrokerSmokeTest(c.T, kafka.NamespacedBrokerClass)
 	})
 }
 
diff --git a/test/upgrade/smoke.go b/test/upgrade/smoke.go
index 85a5bb6a7..30315f596 100644
--- a/test/upgrade/smoke.go
+++ b/test/upgrade/smoke.go
@@ -26,14 +26,14 @@ import (
 	testbroker "knative.dev/eventing-kafka-broker/test/pkg/broker"
 )
 
-func runBrokerSmokeTest(t *testing.T) {
+func runBrokerSmokeTest(t *testing.T, class string) {
 	pkgtesting.RunMultiple(t, func(t *testing.T) {
 		helpers.EventTransformationForTriggerTestHelper(
 			context.Background(),
 			t,
 			/* broker version */ "v1",
 			/* trigger version */ "v1",
-			testbroker.Creator,
+			testbroker.CreatorForClass(class),
 		)
 	})
 }
diff --git a/test/upgrade/suite.go b/test/upgrade/suite.go
index 5495f39a7..e35bab78c 100644
--- a/test/upgrade/suite.go
+++ b/test/upgrade/suite.go
@@ -28,16 +28,19 @@ func Suite() pkgupgrade.Suite {
 		Tests: pkgupgrade.Tests{
 			PreUpgrade: []pkgupgrade.Operation{
 				BrokerPreUpgradeTest(),
+				NamespacedBrokerPreUpgradeTest(),
 				ChannelPreUpgradeTest(),
 				SinkPreUpgradeTest(),
 			},
 			PostUpgrade: []pkgupgrade.Operation{
 				BrokerPostUpgradeTest(),
+				NamespacedBrokerPostUpgradeTest(),
 				ChannelPostUpgradeTest(),
 				SinkPostUpgradeTest(),
 			},
 			PostDowngrade: []pkgupgrade.Operation{
 				BrokerPostDowngradeTest(),
+				NamespacedBrokerPostDowngradeTest(),
 				ChannelPostDowngradeTest(),
 				SinkPostDowngradeTest(),
 			},
diff --git a/third_party/eventing-latest/eventing-core.yaml b/third_party/eventing-latest/eventing-core.yaml
index b5ef59373..8b0f77dbf 100644
--- a/third_party/eventing-latest/eventing-core.yaml
+++ b/third_party/eventing-latest/eventing-core.yaml
@@ -16,8 +16,8 @@ kind: Namespace
 metadata:
   name: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 
 ---
@@ -41,8 +41,8 @@ metadata:
   name: eventing-controller
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -50,8 +50,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -67,8 +67,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -84,8 +84,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-source-observer
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -101,8 +101,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-sources-controller
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -118,8 +118,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-controller-manipulator
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -151,8 +151,8 @@ metadata:
   name: pingsource-mt-adapter
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -160,8 +160,8 @@ kind: ClusterRoleBinding
 metadata:
   name: knative-eventing-pingsource-mt-adapter
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -193,8 +193,8 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -202,8 +202,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -220,8 +220,8 @@ metadata:
   namespace: knative-eventing
   name: eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -237,8 +237,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -254,8 +254,8 @@ kind: ClusterRoleBinding
 metadata:
   name: eventing-webhook-podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 subjects:
   - kind: ServiceAccount
@@ -287,8 +287,8 @@ metadata:
   name: config-br-default-channel
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   channel-template-spec: |
@@ -316,8 +316,8 @@ metadata:
   name: config-br-defaults
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   # Configures the default for any Broker that does not specify a spec.config or Broker class.
@@ -354,8 +354,8 @@ metadata:
   name: default-ch-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   # Configuration for defaulting channels that do not specify CRD implementations.
@@ -389,10 +389,10 @@ metadata:
   name: config-ping-defaults
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
   annotations:
     knative.dev/example-checksum: "9185c153"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   _example: |
@@ -436,10 +436,10 @@ metadata:
   name: config-features
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   # ALPHA feature: The kreference-group allows you to use the Group field in KReferences.
@@ -483,7 +483,7 @@ metadata:
   name: config-kreference-mapping
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
   annotations:
@@ -532,8 +532,8 @@ metadata:
   name: config-leader-election
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "f7948630"
@@ -594,10 +594,10 @@ metadata:
   name: config-logging
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 data:
   # Common configuration for all Knative codebase
@@ -648,10 +648,10 @@ metadata:
   name: config-observability
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "f46cf09d"
@@ -725,8 +725,8 @@ metadata:
   name: config-sugar
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "62dfac6f"
@@ -783,10 +783,10 @@ metadata:
   name: config-tracing
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/config-propagation: original
     knative.dev/config-category: eventing
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     knative.dev/example-checksum: "0492ceb0"
@@ -841,10 +841,10 @@ metadata:
   name: eventing-controller
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/high-availability: "true"
     app.kubernetes.io/component: eventing-controller
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   selector:
@@ -854,9 +854,9 @@ spec:
     metadata:
       labels:
         app: eventing-controller
-        eventing.knative.dev/release: "v20221020-98dfb5be7"
+        eventing.knative.dev/release: "v20221024-47c263530"
         app.kubernetes.io/component: eventing-controller
-        app.kubernetes.io/version: "20221020-98dfb5be7"
+        app.kubernetes.io/version: "20221024-47c263530"
         app.kubernetes.io/name: knative-eventing
     spec:
       # To avoid node becoming SPOF, spread our replicas to different nodes.
@@ -874,7 +874,7 @@ spec:
       containers:
         - name: eventing-controller
           terminationMessagePolicy: FallbackToLogsOnError
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/controller@sha256:9715b6ef8ed2b6542488e9b085cc534582e0daf2d37f57b8a06cadf45c7d607a
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/controller@sha256:8490c4e7dea8f31726eaa91f69c29227e5c4fd2197ee27da4ced9a083781fabd
           resources:
             requests:
               cpu: 100m
@@ -892,7 +892,7 @@ spec:
               value: knative.dev/eventing
             # APIServerSource
             - name: APISERVER_RA_IMAGE
-              value: gcr.io/knative-nightly/knative.dev/eventing/cmd/apiserver_receive_adapter@sha256:54adda146e9295a01f06b67d279b7450a1bcb6518f63619b839e67ed7c253be2
+              value: gcr.io/knative-nightly/knative.dev/eventing/cmd/apiserver_receive_adapter@sha256:90a2044b8a8d79440410e918595ef82c764656f268393bcc9cfeafa28490f5cf
             - name: POD_NAME
               valueFrom:
                 fieldRef:
@@ -961,9 +961,9 @@ metadata:
   name: pingsource-mt-adapter
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     app.kubernetes.io/component: pingsource-mt-adapter
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   # when set to 0 (and only 0) will be set to 1 when the first PingSource is created.
@@ -976,9 +976,9 @@ spec:
     metadata:
       labels:
         !!merge <<: *labels
-        eventing.knative.dev/release: "v20221020-98dfb5be7"
+        eventing.knative.dev/release: "v20221024-47c263530"
         app.kubernetes.io/component: pingsource-mt-adapter
-        app.kubernetes.io/version: "20221020-98dfb5be7"
+        app.kubernetes.io/version: "20221024-47c263530"
         app.kubernetes.io/name: knative-eventing
     spec:
       affinity:
@@ -992,7 +992,7 @@ spec:
       enableServiceLinks: false
       containers:
         - name: dispatcher
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/mtping@sha256:b7180d124d23a857e4ef6770e799357563b36f9c6814ef4614e911362206eb35
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/mtping@sha256:23720b7282eb471b1fb600b32c5facd8b555171bb0c3cd294e5c842088df78e7
           env:
             - name: SYSTEM_NAMESPACE
               value: ''
@@ -1065,9 +1065,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   scaleTargetRef:
@@ -1091,9 +1091,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   minAvailable: 80%
@@ -1122,9 +1122,9 @@ metadata:
   name: eventing-webhook
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   selector:
@@ -1135,9 +1135,9 @@ spec:
     metadata:
       labels:
         !!merge <<: *labels
-        eventing.knative.dev/release: "v20221020-98dfb5be7"
+        eventing.knative.dev/release: "v20221024-47c263530"
         app.kubernetes.io/component: eventing-webhook
-        app.kubernetes.io/version: "20221020-98dfb5be7"
+        app.kubernetes.io/version: "20221024-47c263530"
         app.kubernetes.io/name: knative-eventing
     spec:
       # To avoid node becoming SPOF, spread our replicas to different nodes.
@@ -1157,7 +1157,7 @@ spec:
           terminationMessagePolicy: FallbackToLogsOnError
           # This is the Go import path for the binary that is containerized
           # and substituted here.
-          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/webhook@sha256:ac021f502882b580d76f81126e3bc37eeb761bb942c9584b81c53bc24aa5c26b
+          image: gcr.io/knative-nightly/knative.dev/eventing/cmd/webhook@sha256:c60bd8e9d4fd6ee80995055983be218bbf837697e7f03d725687626c2e39737e
           resources:
             requests:
               # taken from serving.
@@ -1228,10 +1228,10 @@ apiVersion: v1
 kind: Service
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     role: eventing-webhook
     app.kubernetes.io/component: eventing-webhook
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   name: eventing-webhook
   namespace: knative-eventing
@@ -1263,11 +1263,11 @@ kind: CustomResourceDefinition
 metadata:
   creationTimestamp: null
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -1479,10 +1479,10 @@ kind: CustomResourceDefinition
 metadata:
   name: brokers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -1646,11 +1646,11 @@ kind: CustomResourceDefinition
 metadata:
   name: channels.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     messaging.knative.dev/subscribable: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -1921,11 +1921,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   name: containersources.sources.knative.dev
 spec:
@@ -2075,9 +2075,9 @@ kind: CustomResourceDefinition
 metadata:
   name: eventtypes.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -2204,10 +2204,10 @@ kind: CustomResourceDefinition
 metadata:
   name: parallels.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -2459,11 +2459,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -2650,10 +2650,10 @@ kind: CustomResourceDefinition
 metadata:
   name: sequences.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -2970,12 +2970,12 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     duck.knative.dev/binding: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   name: sinkbindings.sources.knative.dev
 spec:
@@ -3162,9 +3162,9 @@ kind: CustomResourceDefinition
 metadata:
   name: subscriptions.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -3374,9 +3374,9 @@ kind: CustomResourceDefinition
 metadata:
   name: triggers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -3560,8 +3560,8 @@ kind: ClusterRole
 metadata:
   name: addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -3574,9 +3574,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: service-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3594,9 +3594,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: serving-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3617,9 +3617,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: channel-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3644,9 +3644,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: broker-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3665,9 +3665,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: flows-addressable-resolver
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "addressable-resolver" role.
 rules:
@@ -3703,8 +3703,8 @@ kind: ClusterRole
 metadata:
   name: eventing-broker-filter
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3730,8 +3730,8 @@ kind: ClusterRole
 metadata:
   name: eventing-broker-ingress
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3748,8 +3748,8 @@ kind: ClusterRole
 metadata:
   name: eventing-config-reader
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -3782,8 +3782,8 @@ kind: ClusterRole
 metadata:
   name: channelable-manipulator
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -3796,9 +3796,9 @@ kind: ClusterRole
 metadata:
   name: meta-channelable-manipulator
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/channelable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "channelable-manipulator" role.
 rules:
@@ -3836,9 +3836,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-eventing-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev"]
@@ -3850,9 +3850,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-messaging-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["messaging.knative.dev"]
@@ -3864,9 +3864,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-flows-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["flows.knative.dev"]
@@ -3878,9 +3878,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-sources-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["sources.knative.dev"]
@@ -3892,9 +3892,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: knative-bindings-namespaced-admin
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["bindings.knative.dev"]
@@ -3907,8 +3907,8 @@ metadata:
   name: knative-eventing-namespaced-edit
   labels:
     rbac.authorization.k8s.io/aggregate-to-edit: "true"
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev", "messaging.knative.dev", "sources.knative.dev", "flows.knative.dev", "bindings.knative.dev"]
@@ -3921,8 +3921,8 @@ metadata:
   name: knative-eventing-namespaced-view
   labels:
     rbac.authorization.k8s.io/aggregate-to-view: "true"
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups: ["eventing.knative.dev", "messaging.knative.dev", "sources.knative.dev", "flows.knative.dev", "bindings.knative.dev"]
@@ -3949,8 +3949,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-controller
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -4085,8 +4085,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-pingsource-mt-adapter
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -4153,8 +4153,8 @@ kind: ClusterRole
 metadata:
   name: podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -4167,9 +4167,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: builtin-podspecable-binding
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/podspecable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "podspecable-binding role.
 rules:
@@ -4215,8 +4215,8 @@ kind: ClusterRole
 metadata:
   name: source-observer
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 aggregationRule:
   clusterRoleSelectors:
@@ -4229,9 +4229,9 @@ apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: eventing-sources-source-observer
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     duck.knative.dev/source: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # Do not use this role directly. These rules will be added to the "source-observer" role.
 rules:
@@ -4267,8 +4267,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-sources-controller
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   - apiGroups:
@@ -4354,8 +4354,8 @@ kind: ClusterRole
 metadata:
   name: knative-eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   # For watching logging configuration and getting certs.
@@ -4454,8 +4454,8 @@ metadata:
   namespace: knative-eventing
   name: knative-eventing-webhook
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 rules:
   # For manipulating certs into secrets.
@@ -4491,8 +4491,8 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: config.webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4529,8 +4529,8 @@ kind: MutatingWebhookConfiguration
 metadata:
   name: webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4563,8 +4563,8 @@ kind: ValidatingWebhookConfiguration
 metadata:
   name: validation.webhook.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
@@ -4598,8 +4598,8 @@ metadata:
   name: eventing-webhook-certs
   namespace: knative-eventing
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 # The data is populated at install time.
 
@@ -4623,8 +4623,8 @@ kind: MutatingWebhookConfiguration
 metadata:
   name: sinkbindings.webhook.sources.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 webhooks:
   - admissionReviewVersions: ["v1", "v1beta1"]
diff --git a/third_party/eventing-latest/eventing-crds.yaml b/third_party/eventing-latest/eventing-crds.yaml
index 49ee8b136..4f2a8de53 100644
--- a/third_party/eventing-latest/eventing-crds.yaml
+++ b/third_party/eventing-latest/eventing-crds.yaml
@@ -17,11 +17,11 @@ kind: CustomResourceDefinition
 metadata:
   creationTimestamp: null
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -233,10 +233,10 @@ kind: CustomResourceDefinition
 metadata:
   name: brokers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -400,11 +400,11 @@ kind: CustomResourceDefinition
 metadata:
   name: channels.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     messaging.knative.dev/subscribable: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -675,11 +675,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   name: containersources.sources.knative.dev
 spec:
@@ -829,9 +829,9 @@ kind: CustomResourceDefinition
 metadata:
   name: eventtypes.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev
@@ -958,10 +958,10 @@ kind: CustomResourceDefinition
 metadata:
   name: parallels.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -1213,11 +1213,11 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   annotations:
     # TODO add schemas and descriptions
@@ -1404,10 +1404,10 @@ kind: CustomResourceDefinition
 metadata:
   name: sequences.flows.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
     duck.knative.dev/addressable: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: flows.knative.dev
@@ -1724,12 +1724,12 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     eventing.knative.dev/source: "true"
     duck.knative.dev/source: "true"
     duck.knative.dev/binding: "true"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
   name: sinkbindings.sources.knative.dev
 spec:
@@ -1916,9 +1916,9 @@ kind: CustomResourceDefinition
 metadata:
   name: subscriptions.messaging.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: messaging.knative.dev
@@ -2128,9 +2128,9 @@ kind: CustomResourceDefinition
 metadata:
   name: triggers.eventing.knative.dev
   labels:
-    eventing.knative.dev/release: "v20221020-98dfb5be7"
+    eventing.knative.dev/release: "v20221024-47c263530"
     knative.dev/crd-install: "true"
-    app.kubernetes.io/version: "20221020-98dfb5be7"
+    app.kubernetes.io/version: "20221024-47c263530"
     app.kubernetes.io/name: knative-eventing
 spec:
   group: eventing.knative.dev