Repository: knative-sandbox/eventing-kafka-broker
Pull request #311 (2020-10-19 14:09:02)

Added Egress uid and renamed Resource id to uid
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

Part of #279

As proposed in https://github.com/knative-sandbox/eventing-kafka-broker/compare/master...slinkydeveloper:issues/279_part_2, I wish to modify the reconciliation logic to use uid as index more than the hash of the wrapper resources themselves. This adds uid to Egress (because consumer group may not be always the same as kube uid) and renamed Resource.id to Resource.uid to clarify that the id is unique and relates to kube uid.

<!-- Please include the 'why' behind your changes if no issue exists -->

## Proposed Changes

- Added uid field to egress
- Renamed id field of Resource to uid to clarify it (and make it consistent with egress uid)

<!--
If this change has user-visible impact, follow the instructions below.
Examples include:

- 🎁 Add new feature
- 🐛 Fix bug
- 🧽 Update or clean up current behavior
- 🗑️ Remove feature or internal logic

Otherwise delete the rest of this template.
-->

**Release Note**

<!--
🗒️ If this change has user-visible impact, write a release note in the block
below. Include the string "action required" if additional action is required of
users switching to the new release, for example in case of a breaking change.

Write as if you are speaking to users, not other Knative contributors. If this
change has no user-visible impact, no release-note is needed.
-->

```release-note

```

**Docs**

<!--
📖 If this change has user-visible impact, link to an issue or PR in
https://github.com/knative/docs.
-->


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

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/311#" title="Author self-approved">slinkydeveloper</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/master/OWNERS)~~ [slinkydeveloper]

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/311?src=pr&el=h1) Report
> Merging [#311](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=desc) into [master](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/commit/b55b4dbc52f08418409765640e13bb6a68356d89?el=desc) will **decrease** coverage by `0.85%`.
> The diff coverage is `100.00%`.

[![Impacted file tree graph](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/graphs/tree.svg?width=650&height=150&src=pr&token=xyPIgGOiwy)](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=tree)

```diff
@@             Coverage Diff              @@
##             master     #311      +/-   ##
============================================
- Coverage     76.29%   75.43%   -0.86%     
  Complexity      183      183              
============================================
  Files            49       27      -22     
  Lines          1510      753     -757     
  Branches         47       47              
============================================
- Hits           1152      568     -584     
+ Misses          284      160     -124     
+ Partials         74       25      -49     
```

| Flag | Coverage Δ | Complexity Δ | |
|---|---|---|---|
| #java-unittests | `75.43% <100.00%> (ø)` | `183.00 <1.00> (ø)` | |
| #unittests | `?` | `?` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags#carryforward-flags-in-the-pull-request-comment) to find out more.

| [Impacted Files](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=tree) | Coverage Δ | Complexity Δ | |
|---|---|---|---|
| [...ng/kafka/broker/core/wrappers/ResourceWrapper.java](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-ZGF0YS1wbGFuZS9jb3JlL3NyYy9tYWluL2phdmEvZGV2L2tuYXRpdmUvZXZlbnRpbmcva2Fma2EvYnJva2VyL2NvcmUvd3JhcHBlcnMvUmVzb3VyY2VXcmFwcGVyLmphdmE=) | `88.88% <100.00%> (ø)` | `14.00 <1.00> (ø)` | |
| [control-plane/pkg/reconciler/kafka/topic.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9rYWZrYS90b3BpYy5nbw==) | | | |
| [...ntrol-plane/pkg/reconciler/broker/broker\_config.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9icm9rZXIvYnJva2VyX2NvbmZpZy5nbw==) | | | |
| [control-plane/pkg/receiver/path.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjZWl2ZXIvcGF0aC5nbw==) | | | |
| [control-plane/pkg/core/config/utils.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvY29yZS9jb25maWcvdXRpbHMuZ28=) | | | |
| [control-plane/pkg/reconciler/kafka/broker\_class.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci9rYWZrYS9icm9rZXJfY2xhc3MuZ28=) | | | |
| [...-plane/pkg/reconciler/trigger/trigger\_lifecycle.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci90cmlnZ2VyL3RyaWdnZXJfbGlmZWN5Y2xlLmdv) | | | |
| [control-plane/pkg/reconciler/trigger/controller.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvcmVjb25jaWxlci90cmlnZ2VyL2NvbnRyb2xsZXIuZ28=) | | | |
| [...pkg/apis/eventing/v1alpha1/kafka\_sink\_lifecycle.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvYXBpcy9ldmVudGluZy92MWFscGhhMS9rYWZrYV9zaW5rX2xpZmVjeWNsZS5nbw==) | | | |
| [...ntrol-plane/pkg/apis/eventing/v1alpha1/register.go](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree#diff-Y29udHJvbC1wbGFuZS9wa2cvYXBpcy9ldmVudGluZy92MWFscGhhMS9yZWdpc3Rlci5nbw==) | | | |
| ... and [8 more](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=footer). Last update [b55b4db...708218c](https://codecov.io/gh/knative-sandbox/eventing-kafka-broker/pull/311?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

knative-prow-robot: @slinkydeveloper: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-knative-sandbox-eventing-kafka-broker-build-tests | 708218c89fc344462d7fb00a8accef21205ca180 | [link](https://prow.knative.dev/view/gs/knative-prow/pr-logs/pull/knative-sandbox_eventing-kafka-broker/311/pull-knative-sandbox-eventing-kafka-broker-build-tests/1318192617548156930) | `/test pull-knative-sandbox-eventing-kafka-broker-build-tests`

[Full PR test history](https://gubernator.knative.dev/pr/knative-sandbox_eventing-kafka-broker/311). [Your PR dashboard](https://gubernator.knative.dev/pr/slinkydeveloper).

<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 -->
pierDipi: Can you update codegen?

/approve
knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/311#issuecomment-712192810" title="Approved">pierDipi</a>*, *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/311#" title="Author self-approved">slinkydeveloper</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/master/OWNERS)~~ [pierDipi,slinkydeveloper]

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":[]} -->
slinkydeveloper: the lint doesn't pass for the trailing whitespace :) 
knative-prow-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/311#pullrequestreview-511825883" title="LGTM">pierDipi</a>*, *<a href="https://github.com/knative-sandbox/eventing-kafka-broker/pull/311#" title="Author self-approved">slinkydeveloper</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/master/OWNERS)~~ [pierDipi,slinkydeveloper]

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":[]} -->
pierDipi: I have a PR open to fix it: https://github.com/knative-sandbox/.github/pull/63/files
slinkydeveloper: That's weird, the config map is there (I'm looking here https://00f74ba44b977ed75f1f1c180f01ae3cbf82d82e75-apidata.googleusercontent.com/download/storage/v1/b/knative-prow/o/pr-logs%2Fpull%2Fknative-sandbox_eventing-kafka-broker%2F310%2Fpull-knative-sandbox-eventing-kafka-broker-integration-tests%2F1318185319446614016%2Fartifacts%2F9f9b608a-1210-11eb-8ffa-c2dc0fa0ae6d%2Fk8s.dump-e2e-tests.sh.txt?jk=AFshE3XfW9ZKvmKtvFa8WK8TNaF8wkl6DBP3ng4YbtTeDfV9pL8LPmIIbWkTbVXoE6nwVZs1v30izmrSy-1aMMZxNPwI9MhBW5FlWMfVjgoioGGfVhecIlrjDv6SmkONBHJ9H-ezhzFxxEuf4POPzDQO9Bln3n4nJNd9cN61TKpqAZXZbD2Gqaj0Ie6Tz9FllsPer3m-oOjoZ20m6KwDZu8Np8OfuIHfZ6JSBMsB4wDm2OJmmpLNRgo6wXzxYKWIzrn2s82u3GghnHwfr1cmf25_AWLcrDPAiMhAZvk2bDaAh-dMWmETdSvLG_cUQ4b7uIT8mBc-fOsgq5bPmqawCWsAQT5AJB-KkQKTkFDPYR8JBX_MNZEaW_WoGgKLAwYsuNhOSwrTCBuDYYi_RalLhLaWn-279CcWgJ1ttCN5g2pVDTtqRjBbk55QhORy2fLW0gEDFm0rgPR7iNZ8mFIcJD3qYUlGrebZju69iTCQz29f1hsfM0tJe_qwAY5fD_f9Qr7ZquSBxSUN8e3_CniUvRsiW1F5JfBOd8KVE-i8WkXKvlffv3tU--UvPyXE2XDvcAXrVpBL413I5xMJP28h0QPF1I3NiqJH8N0tw4y6W3e15k6ZZkGad9qnm6BzG8DMbVBW8a1HY0OKHPY1RReY8qopboL0eNVrnHsl-QHGo6lM9_wsK2vfst4wpECLtvyjmz2SxSnKDe94aoROhGmljdMsiOwKLOrK67XBdiNMpSoMn6Xq5LKgcjBH6bWIjZbWrw0YPfw9lOSsO5ntd9Njcx66pzLmwsFcWYA0vxFbRReBZRhXAaqW-ZigkdL58UGUa2gz-7w7GFfKGrjvV4bZIGxmHLsGel-vUbglR90bkQ1MEFDuqfRLVtaYm0m86qfPAFykiSxzS4sZwdekWHNDfR5cclNyloXQ1YKYPCV04nIHpoWBQh-Lqe-hFnrJP8MDIzuQbYd3PeiSkcVOjL0kIEE6PVTuPbKPgBjMHX2ZkM2iU8NLAKkYI-mXTRFPrOrglKvp90g4NyJxdE-1tJKHpph5yPWM-fu1vHaEYKxWqPN5eowZupFHXBrJTNQCVLOjmpZwIxQErioE_1sXrrXymsTAHVo0ZuQVtrOGuK_Vvk0h061uLCRJ963LAT5SpewIpD8W6X-brL5OMg&isca=1)

Patch:
diff --git a/control-plane/pkg/contract/contract.pb.go b/control-plane/pkg/contract/contract.pb.go
index 78f3c409c..6825fa48c 100644
--- a/control-plane/pkg/contract/contract.pb.go
+++ b/control-plane/pkg/contract/contract.pb.go
@@ -267,6 +267,9 @@ type Egress struct {
 	//	*Egress_ReplyToOriginalTopic
 	ReplyStrategy isEgress_ReplyStrategy `protobuf_oneof:"replyStrategy"`
 	Filter        *Filter                `protobuf:"bytes,5,opt,name=filter,proto3" json:"filter,omitempty"`
+	// Id of the egress
+	// It's the same as the Kubernetes resource uid
+	Uid string `protobuf:"bytes,6,opt,name=uid,proto3" json:"uid,omitempty"`
 }
 
 func (x *Egress) Reset() {
@@ -343,6 +346,13 @@ func (x *Egress) GetFilter() *Filter {
 	return nil
 }
 
+func (x *Egress) GetUid() string {
+	if x != nil {
+		return x.Uid
+	}
+	return ""
+}
+
 type isEgress_ReplyStrategy interface {
 	isEgress_ReplyStrategy()
 }
@@ -461,7 +471,8 @@ type Resource struct {
 	unknownFields protoimpl.UnknownFields
 
 	// Id of the resource
-	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	// It's the same as the Kubernetes resource uid
+	Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"`
 	// Topics name
 	// Note: If there is an ingress configured, then this field must have exactly 1 element otherwise,
 	//  if the resource does just dispatch from Kafka, then this topic list can contain multiple elements
@@ -509,9 +520,9 @@ func (*Resource) Descriptor() ([]byte, []int) {
 	return file_proto_def_contract_proto_rawDescGZIP(), []int{4}
 }
 
-func (x *Resource) GetId() string {
+func (x *Resource) GetUid() string {
 	if x != nil {
-		return x.Id
+		return x.Uid
 	}
 	return ""
 }
@@ -632,7 +643,7 @@ var file_proto_def_contract_proto_rawDesc = []byte{
 	0x66, 0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66,
 	0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x6f,
 	0x66, 0x66, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x62,
-	0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0xee, 0x01, 0x0a, 0x06,
+	0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x80, 0x02, 0x0a, 0x06,
 	0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
 	0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
 	0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x20, 0x0a, 0x0b,
@@ -646,47 +657,48 @@ var file_proto_def_contract_proto_rawDesc = []byte{
 	0x74, 0x79, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x54, 0x6f, 0x4f, 0x72, 0x69,
 	0x67, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x1f, 0x0a, 0x06, 0x66, 0x69,
 	0x6c, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x46, 0x69, 0x6c,
-	0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x42, 0x0f, 0x0a, 0x0d, 0x72,
-	0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x74, 0x0a, 0x07,
-	0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65,
-	0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x43,
-	0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74,
-	0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x14, 0x0a,
-	0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x68,
-	0x6f, 0x73, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79,
-	0x70, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
-	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12,
-	0x16, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x74, 0x73,
-	0x74, 0x72, 0x61, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x10, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x53, 0x65, 0x72, 0x76,
-	0x65, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07,
-	0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x65, 0x67, 0x72, 0x65, 0x73,
-	0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
-	0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x65, 0x67,
-	0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23, 0x0a, 0x08, 0x65, 0x67,
-	0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x07, 0x2e, 0x45,
-	0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22,
-	0x53, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x67,
-	0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52,
-	0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x09, 0x72,
-	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09,
-	0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75,
-	0x72, 0x63, 0x65, 0x73, 0x2a, 0x2c, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x50,
-	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
-	0x74, 0x69, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72,
-	0x10, 0x01, 0x2a, 0x29, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64,
-	0x65, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a,
-	0x0a, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x44, 0x10, 0x01, 0x42, 0x5b, 0x0a,
-	0x2a, 0x64, 0x65, 0x76, 0x2e, 0x6b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2e, 0x65, 0x76, 0x65,
-	0x6e, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x2e, 0x62, 0x72, 0x6f, 0x6b,
-	0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x42, 0x11, 0x44, 0x61, 0x74,
-	0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5a, 0x1a,
-	0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2d, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2f, 0x70, 0x6b,
-	0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
-	0x6f, 0x33,
+	0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75,
+	0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x42, 0x0f, 0x0a,
+	0x0d, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, 0x74,
+	0x0a, 0x07, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x0b, 0x63, 0x6f, 0x6e,
+	0x74, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c,
+	0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x63, 0x6f,
+	0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x61, 0x74,
+	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12,
+	0x14, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52,
+	0x04, 0x68, 0x6f, 0x73, 0x74, 0x42, 0x0d, 0x0a, 0x0b, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73,
+	0x54, 0x79, 0x70, 0x65, 0x22, 0xdc, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+	0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
+	0x75, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x62,
+	0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70,
+	0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65,
+	0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65,
+	0x73, 0x73, 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x65,
+	0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x0d, 0x2e, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+	0x52, 0x0c, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x23,
+	0x0a, 0x08, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x07, 0x2e, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x08, 0x65, 0x67, 0x72, 0x65, 0x73,
+	0x73, 0x65, 0x73, 0x22, 0x53, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x12,
+	0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x27, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x09, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2a, 0x2c, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b,
+	0x6f, 0x66, 0x66, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x78, 0x70,
+	0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x69,
+	0x6e, 0x65, 0x61, 0x72, 0x10, 0x01, 0x2a, 0x29, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
+	0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10,
+	0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x55, 0x52, 0x45, 0x44, 0x10,
+	0x01, 0x42, 0x5b, 0x0a, 0x2a, 0x64, 0x65, 0x76, 0x2e, 0x6b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65,
+	0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x2e,
+	0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x42,
+	0x11, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61,
+	0x63, 0x74, 0x5a, 0x1a, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2d, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/control-plane/pkg/core/config/egress.go b/control-plane/pkg/core/config/egress.go
index 78cfb997f..628dce6a6 100644
--- a/control-plane/pkg/core/config/egress.go
+++ b/control-plane/pkg/core/config/egress.go
@@ -29,7 +29,7 @@ const (
 func FindEgress(egresses []*contract.Egress, egress types.UID) int {
 
 	for i, t := range egresses {
-		if t.ConsumerGroup == string(egress) {
+		if t.Uid == string(egress) {
 			return i
 		}
 	}
diff --git a/control-plane/pkg/core/config/resource.go b/control-plane/pkg/core/config/resource.go
index 9026fa4e1..a4b5ca8a6 100644
--- a/control-plane/pkg/core/config/resource.go
+++ b/control-plane/pkg/core/config/resource.go
@@ -31,7 +31,7 @@ const (
 func FindResource(contract *contract.Contract, resource types.UID) int {
 	resourceIndex := NoResource
 	for i, b := range contract.Resources {
-		if b.Id == string(resource) {
+		if b.Uid == string(resource) {
 			resourceIndex = i
 			break
 		}
diff --git a/control-plane/pkg/log/log_marshaller.go b/control-plane/pkg/log/log_marshaller.go
index d4d3bbd97..3c22a23d8 100644
--- a/control-plane/pkg/log/log_marshaller.go
+++ b/control-plane/pkg/log/log_marshaller.go
@@ -39,7 +39,7 @@ func (m *ContractMarshaller) MarshalLogObject(encoder zapcore.ObjectEncoder) err
 type resourceMarshaller contract.Resource
 
 func (b *resourceMarshaller) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
-	encoder.AddString("id", b.Id)
+	encoder.AddString("uid", b.Uid)
 	if err := encoder.AddArray("topics", zapcore.ArrayMarshalerFunc(func(encoder zapcore.ArrayEncoder) error {
 		for _, t := range b.Topics {
 			encoder.AppendString(t)
@@ -88,6 +88,7 @@ func (i *ingressMarshaller) MarshalLogObject(encoder zapcore.ObjectEncoder) erro
 type egressMarshaller contract.Egress
 
 func (e *egressMarshaller) MarshalLogObject(encoder zapcore.ObjectEncoder) error {
+	encoder.AddString("uid", e.Uid)
 	encoder.AddString("consumerGroup", e.ConsumerGroup)
 	encoder.AddString("destination", e.Destination)
 
diff --git a/control-plane/pkg/reconciler/broker/broker.go b/control-plane/pkg/reconciler/broker/broker.go
index b32f26042..02496021e 100644
--- a/control-plane/pkg/reconciler/broker/broker.go
+++ b/control-plane/pkg/reconciler/broker/broker.go
@@ -307,7 +307,7 @@ func (r *Reconciler) defaultConfig() (*kafka.TopicConfig, error) {
 
 func (r *Reconciler) getBrokerResource(ctx context.Context, topic string, broker *eventing.Broker, config *kafka.TopicConfig) (*contract.Resource, error) {
 	res := &contract.Resource{
-		Id:     string(broker.UID),
+		Uid:    string(broker.UID),
 		Topics: []string{topic},
 		Ingress: &contract.Ingress{
 			IngressType: &contract.Ingress_Path{
diff --git a/control-plane/pkg/reconciler/sink/kafka_sink.go b/control-plane/pkg/reconciler/sink/kafka_sink.go
index af8668788..ebc74d2a6 100644
--- a/control-plane/pkg/reconciler/sink/kafka_sink.go
+++ b/control-plane/pkg/reconciler/sink/kafka_sink.go
@@ -135,7 +135,7 @@ func (r *Reconciler) reconcileKind(ctx context.Context, ks *eventing.KafkaSink)
 
 	// Get sink configuration.
 	sinkConfig := &contract.Resource{
-		Id:     string(ks.UID),
+		Uid:    string(ks.UID),
 		Topics: []string{ks.Spec.Topic},
 		Ingress: &contract.Ingress{
 			ContentMode: coreconfig.ContentModeFromString(*ks.Spec.ContentMode),
diff --git a/control-plane/pkg/reconciler/trigger/trigger.go b/control-plane/pkg/reconciler/trigger/trigger.go
index eab8031bf..4e15b8f80 100644
--- a/control-plane/pkg/reconciler/trigger/trigger.go
+++ b/control-plane/pkg/reconciler/trigger/trigger.go
@@ -155,6 +155,7 @@ func (r *Reconciler) getTriggerConfig(ctx context.Context, trigger *eventing.Tri
 	egress := &contract.Egress{
 		Destination:   destination.String(),
 		ConsumerGroup: string(trigger.UID),
+		Uid:           string(trigger.UID),
 	}
 
 	if trigger.Spec.Filter != nil && trigger.Spec.Filter.Attributes != nil {
diff --git a/data-plane/contract/src/main/java/dev/knative/eventing/kafka/broker/contract/DataPlaneContract.java b/data-plane/contract/src/main/java/dev/knative/eventing/kafka/broker/contract/DataPlaneContract.java
index 893c952cb..2eb23fed5 100644
--- a/data-plane/contract/src/main/java/dev/knative/eventing/kafka/broker/contract/DataPlaneContract.java
+++ b/data-plane/contract/src/main/java/dev/knative/eventing/kafka/broker/contract/DataPlaneContract.java
@@ -2164,6 +2164,28 @@ public final class DataPlaneContract {
      */
     dev.knative.eventing.kafka.broker.contract.DataPlaneContract.FilterOrBuilder getFilterOrBuilder();
 
+    /**
+     * <pre>
+     * Id of the egress
+     * It's the same as the Kubernetes resource uid
+     * </pre>
+     *
+     * <code>string uid = 6;</code>
+     * @return The uid.
+     */
+    java.lang.String getUid();
+    /**
+     * <pre>
+     * Id of the egress
+     * It's the same as the Kubernetes resource uid
+     * </pre>
+     *
+     * <code>string uid = 6;</code>
+     * @return The bytes for uid.
+     */
+    com.google.protobuf.ByteString
+        getUidBytes();
+
     public dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Egress.ReplyStrategyCase getReplyStrategyCase();
   }
   /**
@@ -2181,6 +2203,7 @@ public final class DataPlaneContract {
     private Egress() {
       consumerGroup_ = "";
       destination_ = "";
+      uid_ = "";
     }
 
     @java.lang.Override
@@ -2258,6 +2281,12 @@ public final class DataPlaneContract {
 
               break;
             }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              uid_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2545,6 +2574,54 @@ public final class DataPlaneContract {
       return getFilter();
     }
 
+    public static final int UID_FIELD_NUMBER = 6;
+    private volatile java.lang.Object uid_;
+    /**
+     * <pre>
+     * Id of the egress
+     * It's the same as the Kubernetes resource uid
+     * </pre>
+     *
+     * <code>string uid = 6;</code>
+     * @return The uid.
+     */
+    @java.lang.Override
+    public java.lang.String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        uid_ = s;
+        return s;
+      }
+    }
+    /**
+     * <pre>
+     * Id of the egress
+     * It's the same as the Kubernetes resource uid
+     * </pre>
+     *
+     * <code>string uid = 6;</code>
+     * @return The bytes for uid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2574,6 +2651,9 @@ public final class DataPlaneContract {
       if (filter_ != null) {
         output.writeMessage(5, getFilter());
       }
+      if (!getUidBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, uid_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -2600,6 +2680,9 @@ public final class DataPlaneContract {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(5, getFilter());
       }
+      if (!getUidBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, uid_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2624,6 +2707,8 @@ public final class DataPlaneContract {
         if (!getFilter()
             .equals(other.getFilter())) return false;
       }
+      if (!getUid()
+          .equals(other.getUid())) return false;
       if (!getReplyStrategyCase().equals(other.getReplyStrategyCase())) return false;
       switch (replyStrategyCase_) {
         case 3:
@@ -2656,6 +2741,8 @@ public final class DataPlaneContract {
         hash = (37 * hash) + FILTER_FIELD_NUMBER;
         hash = (53 * hash) + getFilter().hashCode();
       }
+      hash = (37 * hash) + UID_FIELD_NUMBER;
+      hash = (53 * hash) + getUid().hashCode();
       switch (replyStrategyCase_) {
         case 3:
           hash = (37 * hash) + REPLYURL_FIELD_NUMBER;
@@ -2811,6 +2898,8 @@ public final class DataPlaneContract {
           filter_ = null;
           filterBuilder_ = null;
         }
+        uid_ = "";
+
         replyStrategyCase_ = 0;
         replyStrategy_ = null;
         return this;
@@ -2856,6 +2945,7 @@ public final class DataPlaneContract {
         } else {
           result.filter_ = filterBuilder_.build();
         }
+        result.uid_ = uid_;
         result.replyStrategyCase_ = replyStrategyCase_;
         onBuilt();
         return result;
@@ -2916,6 +3006,10 @@ public final class DataPlaneContract {
         if (other.hasFilter()) {
           mergeFilter(other.getFilter());
         }
+        if (!other.getUid().isEmpty()) {
+          uid_ = other.uid_;
+          onChanged();
+        }
         switch (other.getReplyStrategyCase()) {
           case REPLYURL: {
             replyStrategyCase_ = 3;
@@ -3571,6 +3665,107 @@ public final class DataPlaneContract {
         }
         return filterBuilder_;
       }
+
+      private java.lang.Object uid_ = "";
+      /**
+       * <pre>
+       * Id of the egress
+       * It's the same as the Kubernetes resource uid
+       * </pre>
+       *
+       * <code>string uid = 6;</code>
+       * @return The uid.
+       */
+      public java.lang.String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <pre>
+       * Id of the egress
+       * It's the same as the Kubernetes resource uid
+       * </pre>
+       *
+       * <code>string uid = 6;</code>
+       * @return The bytes for uid.
+       */
+      public com.google.protobuf.ByteString
+          getUidBytes() {
+        java.lang.Object ref = uid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <pre>
+       * Id of the egress
+       * It's the same as the Kubernetes resource uid
+       * </pre>
+       *
+       * <code>string uid = 6;</code>
+       * @param value The uid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Id of the egress
+       * It's the same as the Kubernetes resource uid
+       * </pre>
+       *
+       * <code>string uid = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUid() {
+        
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      /**
+       * <pre>
+       * Id of the egress
+       * It's the same as the Kubernetes resource uid
+       * </pre>
+       *
+       * <code>string uid = 6;</code>
+       * @param value The bytes for uid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uid_ = value;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4689,22 +4884,24 @@ public final class DataPlaneContract {
     /**
      * <pre>
      * Id of the resource
+     * It's the same as the Kubernetes resource uid
      * </pre>
      *
-     * <code>string id = 1;</code>
-     * @return The id.
+     * <code>string uid = 1;</code>
+     * @return The uid.
      */
-    java.lang.String getId();
+    java.lang.String getUid();
     /**
      * <pre>
      * Id of the resource
+     * It's the same as the Kubernetes resource uid
      * </pre>
      *
-     * <code>string id = 1;</code>
-     * @return The bytes for id.
+     * <code>string uid = 1;</code>
+     * @return The bytes for uid.
      */
     com.google.protobuf.ByteString
-        getIdBytes();
+        getUidBytes();
 
     /**
      * <pre>
@@ -4888,7 +5085,7 @@ public final class DataPlaneContract {
       super(builder);
     }
     private Resource() {
-      id_ = "";
+      uid_ = "";
       topics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       bootstrapServers_ = "";
       egresses_ = java.util.Collections.emptyList();
@@ -4928,7 +5125,7 @@ public final class DataPlaneContract {
             case 10: {
               java.lang.String s = input.readStringRequireUtf8();
 
-              id_ = s;
+              uid_ = s;
               break;
             }
             case 18: {
@@ -5019,46 +5216,48 @@ public final class DataPlaneContract {
               dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource.class, dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource.Builder.class);
     }
 
-    public static final int ID_FIELD_NUMBER = 1;
-    private volatile java.lang.Object id_;
+    public static final int UID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object uid_;
     /**
      * <pre>
      * Id of the resource
+     * It's the same as the Kubernetes resource uid
      * </pre>
      *
-     * <code>string id = 1;</code>
-     * @return The id.
+     * <code>string uid = 1;</code>
+     * @return The uid.
      */
     @java.lang.Override
-    public java.lang.String getId() {
-      java.lang.Object ref = id_;
+    public java.lang.String getUid() {
+      java.lang.Object ref = uid_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        id_ = s;
+        uid_ = s;
         return s;
       }
     }
     /**
      * <pre>
      * Id of the resource
+     * It's the same as the Kubernetes resource uid
      * </pre>
      *
-     * <code>string id = 1;</code>
-     * @return The bytes for id.
+     * <code>string uid = 1;</code>
+     * @return The bytes for uid.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getIdBytes() {
-      java.lang.Object ref = id_;
+        getUidBytes() {
+      java.lang.Object ref = uid_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        id_ = b;
+        uid_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
@@ -5322,8 +5521,8 @@ public final class DataPlaneContract {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getIdBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
+      if (!getUidBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uid_);
       }
       for (int i = 0; i < topics_.size(); i++) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, topics_.getRaw(i));
@@ -5349,8 +5548,8 @@ public final class DataPlaneContract {
       if (size != -1) return size;
 
       size = 0;
-      if (!getIdBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
+      if (!getUidBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uid_);
       }
       {
         int dataSize = 0;
@@ -5390,8 +5589,8 @@ public final class DataPlaneContract {
       }
       dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource other = (dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource) obj;
 
-      if (!getId()
-          .equals(other.getId())) return false;
+      if (!getUid()
+          .equals(other.getUid())) return false;
       if (!getTopicsList()
           .equals(other.getTopicsList())) return false;
       if (!getBootstrapServers()
@@ -5419,8 +5618,8 @@ public final class DataPlaneContract {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ID_FIELD_NUMBER;
-      hash = (53 * hash) + getId().hashCode();
+      hash = (37 * hash) + UID_FIELD_NUMBER;
+      hash = (53 * hash) + getUid().hashCode();
       if (getTopicsCount() > 0) {
         hash = (37 * hash) + TOPICS_FIELD_NUMBER;
         hash = (53 * hash) + getTopicsList().hashCode();
@@ -5573,7 +5772,7 @@ public final class DataPlaneContract {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        id_ = "";
+        uid_ = "";
 
         topics_ = com.google.protobuf.LazyStringArrayList.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000001);
@@ -5624,7 +5823,7 @@ public final class DataPlaneContract {
       public dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource buildPartial() {
         dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource result = new dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource(this);
         int from_bitField0_ = bitField0_;
-        result.id_ = id_;
+        result.uid_ = uid_;
         if (((bitField0_ & 0x00000001) != 0)) {
           topics_ = topics_.getUnmodifiableView();
           bitField0_ = (bitField0_ & ~0x00000001);
@@ -5698,8 +5897,8 @@ public final class DataPlaneContract {
 
       public Builder mergeFrom(dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource other) {
         if (other == dev.knative.eventing.kafka.broker.contract.DataPlaneContract.Resource.getDefaultInstance()) return this;
-        if (!other.getId().isEmpty()) {
-          id_ = other.id_;
+        if (!other.getUid().isEmpty()) {
+          uid_ = other.uid_;
           onChanged();
         }
         if (!other.topics_.isEmpty()) {
@@ -5778,22 +5977,23 @@ public final class DataPlaneContract {
       }
       private int bitField0_;
 
-      private java.lang.Object id_ = "";
+      private java.lang.Object uid_ = "";
       /**
        * <pre>
        * Id of the resource
+       * It's the same as the Kubernetes resource uid
        * </pre>
        *
-       * <code>string id = 1;</code>
-       * @return The id.
+       * <code>string uid = 1;</code>
+       * @return The uid.
        */
-      public java.lang.String getId() {
-        java.lang.Object ref = id_;
+      public java.lang.String getUid() {
+        java.lang.Object ref = uid_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          id_ = s;
+          uid_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
@@ -5802,19 +6002,20 @@ public final class DataPlaneContract {
       /**
        * <pre>
        * Id of the resource
+       * It's the same as the Kubernetes resource uid
        * </pre>
        *
-       * <code>string id = 1;</code>
-       * @return The bytes for id.
+       * <code>string uid = 1;</code>
+       * @return The bytes for uid.
        */
       public com.google.protobuf.ByteString
-          getIdBytes() {
-        java.lang.Object ref = id_;
+          getUidBytes() {
+        java.lang.Object ref = uid_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          id_ = b;
+          uid_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
@@ -5823,53 +6024,56 @@ public final class DataPlaneContract {
       /**
        * <pre>
        * Id of the resource
+       * It's the same as the Kubernetes resource uid
        * </pre>
        *
-       * <code>string id = 1;</code>
-       * @param value The id to set.
+       * <code>string uid = 1;</code>
+       * @param value The uid to set.
        * @return This builder for chaining.
        */
-      public Builder setId(
+      public Builder setUid(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        id_ = value;
+        uid_ = value;
         onChanged();
         return this;
       }
       /**
        * <pre>
        * Id of the resource
+       * It's the same as the Kubernetes resource uid
        * </pre>
        *
-       * <code>string id = 1;</code>
+       * <code>string uid = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder clearId() {
+      public Builder clearUid() {
         
-        id_ = getDefaultInstance().getId();
+        uid_ = getDefaultInstance().getUid();
         onChanged();
         return this;
       }
       /**
        * <pre>
        * Id of the resource
+       * It's the same as the Kubernetes resource uid
        * </pre>
        *
-       * <code>string id = 1;</code>
-       * @param value The bytes for id to set.
+       * <code>string uid = 1;</code>
+       * @param value The bytes for uid to set.
        * @return This builder for chaining.
        */
-      public Builder setIdBytes(
+      public Builder setUidBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        id_ = value;
+        uid_ = value;
         onChanged();
         return this;
       }
@@ -7752,24 +7956,25 @@ public final class DataPlaneContract {
       "utesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028" +
       "\001\"n\n\014EgressConfig\022\022\n\ndeadLetter\030\001 \001(\t\022\r\n" +
       "\005retry\030\002 \001(\r\022%\n\rbackoffPolicy\030\003 \001(\0162\016.Ba" +
-      "ckoffPolicy\022\024\n\014backoffDelay\030\004 \001(\004\"\252\001\n\006Eg" +
+      "ckoffPolicy\022\024\n\014backoffDelay\030\004 \001(\004\"\267\001\n\006Eg" +
       "ress\022\025\n\rconsumerGroup\030\001 \001(\t\022\023\n\013destinati" +
       "on\030\002 \001(\t\022\022\n\010replyUrl\030\003 \001(\tH\000\0226\n\024replyToO" +
       "riginalTopic\030\004 \001(\0132\026.google.protobuf.Emp" +
-      "tyH\000\022\027\n\006filter\030\005 \001(\0132\007.FilterB\017\n\rreplySt" +
-      "rategy\"[\n\007Ingress\022!\n\013contentMode\030\001 \001(\0162\014" +
-      ".ContentMode\022\016\n\004path\030\002 \001(\tH\000\022\016\n\004host\030\003 \001" +
-      "(\tH\000B\r\n\013ingressType\"\233\001\n\010Resource\022\n\n\002id\030\001" +
-      " \001(\t\022\016\n\006topics\030\002 \003(\t\022\030\n\020bootstrapServers" +
-      "\030\003 \001(\t\022\031\n\007ingress\030\004 \001(\0132\010.Ingress\022#\n\014egr" +
-      "essConfig\030\005 \001(\0132\r.EgressConfig\022\031\n\010egress" +
-      "es\030\006 \003(\0132\007.Egress\"<\n\010Contract\022\022\n\ngenerat" +
-      "ion\030\001 \001(\004\022\034\n\tresources\030\002 \003(\0132\t.Resource*" +
-      ",\n\rBackoffPolicy\022\017\n\013Exponential\020\000\022\n\n\006Lin" +
-      "ear\020\001*)\n\013ContentMode\022\n\n\006BINARY\020\000\022\016\n\nSTRU" +
-      "CTURED\020\001B[\n*dev.knative.eventing.kafka.b" +
-      "roker.contractB\021DataPlaneContractZ\032contr" +
-      "ol-plane/pkg/contractb\006proto3"
+      "tyH\000\022\027\n\006filter\030\005 \001(\0132\007.Filter\022\013\n\003uid\030\006 \001" +
+      "(\tB\017\n\rreplyStrategy\"[\n\007Ingress\022!\n\013conten" +
+      "tMode\030\001 \001(\0162\014.ContentMode\022\016\n\004path\030\002 \001(\tH" +
+      "\000\022\016\n\004host\030\003 \001(\tH\000B\r\n\013ingressType\"\234\001\n\010Res" +
+      "ource\022\013\n\003uid\030\001 \001(\t\022\016\n\006topics\030\002 \003(\t\022\030\n\020bo" +
+      "otstrapServers\030\003 \001(\t\022\031\n\007ingress\030\004 \001(\0132\010." +
+      "Ingress\022#\n\014egressConfig\030\005 \001(\0132\r.EgressCo" +
+      "nfig\022\031\n\010egresses\030\006 \003(\0132\007.Egress\"<\n\010Contr" +
+      "act\022\022\n\ngeneration\030\001 \001(\004\022\034\n\tresources\030\002 \003" +
+      "(\0132\t.Resource*,\n\rBackoffPolicy\022\017\n\013Expone" +
+      "ntial\020\000\022\n\n\006Linear\020\001*)\n\013ContentMode\022\n\n\006BI" +
+      "NARY\020\000\022\016\n\nSTRUCTURED\020\001B[\n*dev.knative.ev" +
+      "enting.kafka.broker.contractB\021DataPlaneC" +
+      "ontractZ\032control-plane/pkg/contractb\006pro" +
+      "to3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -7799,7 +8004,7 @@ public final class DataPlaneContract {
     internal_static_Egress_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_Egress_descriptor,
-        new java.lang.String[] { "ConsumerGroup", "Destination", "ReplyUrl", "ReplyToOriginalTopic", "Filter", "ReplyStrategy", });
+        new java.lang.String[] { "ConsumerGroup", "Destination", "ReplyUrl", "ReplyToOriginalTopic", "Filter", "Uid", "ReplyStrategy", });
     internal_static_Ingress_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_Ingress_fieldAccessorTable = new
@@ -7811,7 +8016,7 @@ public final class DataPlaneContract {
     internal_static_Resource_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_Resource_descriptor,
-        new java.lang.String[] { "Id", "Topics", "BootstrapServers", "Ingress", "EgressConfig", "Egresses", });
+        new java.lang.String[] { "Uid", "Topics", "BootstrapServers", "Ingress", "EgressConfig", "Egresses", });
     internal_static_Contract_descriptor =
       getDescriptor().getMessageTypes().get(5);
     internal_static_Contract_fieldAccessorTable = new
diff --git a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapper.java b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapper.java
index 38db614c1..34221c70d 100644
--- a/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapper.java
+++ b/data-plane/core/src/main/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapper.java
@@ -42,7 +42,7 @@ public class ResourceWrapper implements Resource {
 
   @Override
   public String id() {
-    return resource.getId();
+    return resource.getUid();
   }
 
   @Override
diff --git a/proto/def/contract.proto b/proto/def/contract.proto
index cdb93c74b..c87550c28 100644
--- a/proto/def/contract.proto
+++ b/proto/def/contract.proto
@@ -59,6 +59,10 @@ message Egress {
   }
 
   Filter filter = 5;
+
+  // Id of the egress
+  // It's the same as the Kubernetes resource uid
+  string uid = 6;
 }
 
 // CloudEvent content mode
@@ -84,7 +88,8 @@ message Ingress {
 
 message Resource {
   // Id of the resource
-  string id = 1;
+  // It's the same as the Kubernetes resource uid
+  string uid = 1;
 
   // Topics name
   // Note: If there is an ingress configured, then this field must have exactly 1 element otherwise,


Test patch:
diff --git a/control-plane/pkg/core/config/egress_test.go b/control-plane/pkg/core/config/egress_test.go
index 6093ddf4e..892c30a9e 100644
--- a/control-plane/pkg/core/config/egress_test.go
+++ b/control-plane/pkg/core/config/egress_test.go
@@ -45,7 +45,8 @@ func TestFindEgress(t *testing.T) {
 							},
 						},
 						Destination:   "http://localhost:9090",
-						ConsumerGroup: "2",
+						ConsumerGroup: "2-a",
+						Uid:           "2",
 					},
 				},
 				egress: "1",
@@ -63,7 +64,8 @@ func TestFindEgress(t *testing.T) {
 							},
 						},
 						Destination:   "http://localhost:9090",
-						ConsumerGroup: "2",
+						ConsumerGroup: "2-a",
+						Uid:           "2",
 					},
 					{
 						Filter: &contract.Filter{
@@ -72,7 +74,8 @@ func TestFindEgress(t *testing.T) {
 							},
 						},
 						Destination:   "http://localhost:9090",
-						ConsumerGroup: "1",
+						ConsumerGroup: "1-a",
+						Uid:           "1",
 					},
 				},
 				egress: "1",
diff --git a/control-plane/pkg/core/config/resource_test.go b/control-plane/pkg/core/config/resource_test.go
index b61dc9edc..0f593bd83 100644
--- a/control-plane/pkg/core/config/resource_test.go
+++ b/control-plane/pkg/core/config/resource_test.go
@@ -44,7 +44,7 @@ func TestFindResource(t *testing.T) {
 				contract: &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id: "2",
+							Uid: "2",
 						},
 					},
 					Generation: 1,
@@ -59,7 +59,7 @@ func TestFindResource(t *testing.T) {
 				contract: &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id: "1",
+							Uid: "1",
 						},
 					},
 					Generation: 1,
@@ -91,7 +91,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 			haveContract: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id:     "2",
+						Uid:    "2",
 						Topics: []string{"topic-name-1"},
 						Egresses: []*contract.Egress{
 							{
@@ -102,6 +102,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 										"source": "source1",
 									},
 								},
+								Uid: "egress-1",
 							},
 						},
 						Ingress: &contract.Ingress{
@@ -116,7 +117,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 				Generation: 1,
 			},
 			newResource: &contract.Resource{
-				Id:     "1",
+				Uid:    "1",
 				Topics: []string{"topic-name-1"},
 				Ingress: &contract.Ingress{
 					IngressType: &contract.Ingress_Path{
@@ -133,6 +134,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 								"source": "source1",
 							},
 						},
+						Uid: "egress-1",
 					},
 				},
 				BootstrapServers: "broker:9092",
@@ -141,7 +143,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 			wantContract: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id:     "2",
+						Uid:    "2",
 						Topics: []string{"topic-name-1"},
 						Ingress: &contract.Ingress{
 							IngressType: &contract.Ingress_Path{
@@ -158,12 +160,13 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 										"source": "source1",
 									},
 								},
+								Uid: "egress-1",
 							},
 						},
 						BootstrapServers: "broker:9092",
 					},
 					{
-						Id:     "1",
+						Uid:    "1",
 						Topics: []string{"topic-name-1"},
 						Egresses: []*contract.Egress{
 							{
@@ -174,6 +177,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 										"source": "source1",
 									},
 								},
+								Uid: "egress-1",
 							},
 						},
 						BootstrapServers: "broker:9092",
@@ -193,7 +197,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 			haveContract: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id:     "1",
+						Uid:    "1",
 						Topics: []string{"topic-name-1"},
 						Egresses: []*contract.Egress{
 							{
@@ -204,6 +208,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 								},
 								Destination:   "http://localhost:8080",
 								ConsumerGroup: "egress-1",
+								Uid:           "egress-1",
 							},
 						},
 						BootstrapServers: "broker:9092",
@@ -218,7 +223,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 				Generation: 1,
 			},
 			newResource: &contract.Resource{
-				Id:     "1",
+				Uid:    "1",
 				Topics: []string{"topic-name-1"},
 				// Any Trigger will be ignored, since the function will be called when we're reconciling a contract.Resource,
 				// and it should preserve Egresses already added to the ConfigMap.
@@ -231,6 +236,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 						},
 						Destination:   "http://localhost:8080",
 						ConsumerGroup: "egress-1",
+						Uid:           "egress-1",
 					},
 				},
 				BootstrapServers: "broker:9092,broker-2:9092",
@@ -245,7 +251,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 			wantContract: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id:     "1",
+						Uid:    "1",
 						Topics: []string{"topic-name-1"},
 						Egresses: []*contract.Egress{
 							{
@@ -256,6 +262,7 @@ func TestAddOrUpdateResourcesConfig(t *testing.T) {
 								},
 								Destination:   "http://localhost:8080",
 								ConsumerGroup: "egress-1",
+								Uid:           "egress-1",
 							},
 						},
 						BootstrapServers: "broker:9092,broker-2:9092",
@@ -295,7 +302,7 @@ func TestDeleteResource(t *testing.T) {
 			ct: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 				},
 				Generation: 200,
@@ -310,10 +317,10 @@ func TestDeleteResource(t *testing.T) {
 			ct: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 					{
-						Id: "2",
+						Uid: "2",
 					},
 				},
 			},
@@ -321,7 +328,7 @@ func TestDeleteResource(t *testing.T) {
 			want: contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "2",
+						Uid: "2",
 					},
 				},
 			},
@@ -331,13 +338,13 @@ func TestDeleteResource(t *testing.T) {
 			ct: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 					{
-						Id: "2",
+						Uid: "2",
 					},
 					{
-						Id: "3",
+						Uid: "3",
 					},
 				},
 			},
@@ -345,10 +352,10 @@ func TestDeleteResource(t *testing.T) {
 			want: contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 					{
-						Id: "2",
+						Uid: "2",
 					},
 				},
 			},
@@ -358,13 +365,13 @@ func TestDeleteResource(t *testing.T) {
 			ct: &contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 					{
-						Id: "2",
+						Uid: "2",
 					},
 					{
-						Id: "3",
+						Uid: "3",
 					},
 				},
 				Generation: 200,
@@ -373,10 +380,10 @@ func TestDeleteResource(t *testing.T) {
 			want: contract.Contract{
 				Resources: []*contract.Resource{
 					{
-						Id: "1",
+						Uid: "1",
 					},
 					{
-						Id: "3",
+						Uid: "3",
 					},
 				},
 				Generation: 200,
diff --git a/control-plane/pkg/reconciler/broker/broker_test.go b/control-plane/pkg/reconciler/broker/broker_test.go
index 62cd01487..2c54a1899 100644
--- a/control-plane/pkg/reconciler/broker/broker_test.go
+++ b/control-plane/pkg/reconciler/broker/broker_test.go
@@ -123,7 +123,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -180,7 +180,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -280,7 +280,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -335,7 +335,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -376,13 +376,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
 							Topics:       []string{"my-existing-topic-b"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -404,18 +404,18 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
 							Topics:       []string{"my-existing-topic-b"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -468,12 +468,12 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{BrokerTopic()},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -495,12 +495,12 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -556,13 +556,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{BrokerTopic()},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
@@ -585,13 +585,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -635,13 +635,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 						},
@@ -664,13 +664,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -717,13 +717,13 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 						},
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -833,7 +833,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -981,7 +981,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{BrokerTopic()},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://test-service.test-service-namespace.svc.cluster.local/"},
 							Egresses: []*contract.Egress{
@@ -1024,7 +1024,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 							Egresses: []*contract.Egress{
 								{
@@ -1132,7 +1132,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -1196,7 +1196,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -1260,7 +1260,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -1321,7 +1321,7 @@ func brokerReconciliation(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               BrokerUUID,
+							Uid:              BrokerUUID,
 							Topics:           []string{BrokerTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_BINARY, IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							BootstrapServers: bootstrapServers,
@@ -1394,7 +1394,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 						},
@@ -1422,7 +1422,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{BrokerTopic()},
 							Ingress:      &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://test-service.test-service-namespace.svc.cluster.local/"},
@@ -1448,7 +1448,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{BrokerTopic()},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://test-service.test-service-namespace.svc.cluster.local/"},
 						},
@@ -1502,12 +1502,12 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{"my-existing-topic-b"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -1520,7 +1520,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -1539,12 +1539,12 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:           BrokerUUID,
+							Uid:          BrokerUUID,
 							Topics:       []string{"my-existing-topic-b"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -1557,7 +1557,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
@@ -1577,7 +1577,7 @@ func brokerFinalization(t *testing.T, format string, configs Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
diff --git a/control-plane/pkg/reconciler/sink/kafka_sink_test.go b/control-plane/pkg/reconciler/sink/kafka_sink_test.go
index 2a86afc58..841c6f382 100644
--- a/control-plane/pkg/reconciler/sink/kafka_sink_test.go
+++ b/control-plane/pkg/reconciler/sink/kafka_sink_test.go
@@ -114,7 +114,7 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: bootstrapServers,
@@ -170,7 +170,7 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							BootstrapServers: bootstrapServers,
 							Ingress: &contract.Ingress{
@@ -283,7 +283,7 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{"my-topic-1"},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: "kafka-broker:10000",
@@ -387,7 +387,7 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: bootstrapServers,
@@ -436,7 +436,7 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: bootstrapServers,
@@ -477,12 +477,12 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:     "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:  []string{"my-existing-topic-a"},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 						},
 						{
-							Id:     "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
+							Uid:    "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
 							Topics: []string{"my-existing-topic-b"},
 						},
 					},
@@ -499,16 +499,16 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:     "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:  []string{"my-existing-topic-a"},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 						},
 						{
-							Id:     "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
+							Uid:    "5384faa4-6bdf-428d-b6c2-d6f89ce1d44a",
 							Topics: []string{"my-existing-topic-b"},
 						},
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: bootstrapServers,
@@ -549,12 +549,12 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							BootstrapServers: bootstrapServers,
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED},
@@ -573,12 +573,12 @@ func sinkReconciliation(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:           "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
+							Uid:          "5384faa4-6bdf-428d-b6c2-d6f89ce1d44b",
 							Topics:       []string{"my-existing-topic-a"},
 							EgressConfig: &contract.EgressConfig{DeadLetter: "http://www.my-sink.com"},
 						},
 						{
-							Id:               SinkUUID,
+							Uid:              SinkUUID,
 							Topics:           []string{SinkTopic()},
 							Ingress:          &contract.Ingress{ContentMode: contract.ContentMode_STRUCTURED, IngressType: &contract.Ingress_Path{Path: receiver.Path(SinkNamespace, SinkName)}},
 							BootstrapServers: bootstrapServers,
@@ -671,7 +671,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -683,7 +683,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 							BootstrapServers: bootstrapServers,
 						},
 						{
-							Id:     SinkUUID,
+							Uid:    SinkUUID,
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -702,7 +702,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -726,7 +726,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -737,7 +737,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 							BootstrapServers: bootstrapServers,
 						},
 						{
-							Id:     SinkUUID,
+							Uid:    SinkUUID,
 							Topics: []string{"topic-2"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -756,7 +756,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -783,7 +783,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -794,7 +794,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 							BootstrapServers: bootstrapServers,
 						},
 						{
-							Id:     SinkUUID,
+							Uid:    SinkUUID,
 							Topics: []string{"topic-2"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
@@ -822,7 +822,7 @@ func sinkFinalization(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     SinkUUID + "a",
+							Uid:    SinkUUID + "a",
 							Topics: []string{"topic"},
 							Ingress: &contract.Ingress{
 								IngressType: &contract.Ingress_Path{
diff --git a/control-plane/pkg/reconciler/trigger/trigger_test.go b/control-plane/pkg/reconciler/trigger/trigger_test.go
index 288b6c5b2..1654ede64 100644
--- a/control-plane/pkg/reconciler/trigger/trigger_test.go
+++ b/control-plane/pkg/reconciler/trigger/trigger_test.go
@@ -90,7 +90,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 						},
@@ -109,13 +109,14 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -150,18 +151,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "z",
+							Uid:     BrokerUUID + "z",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
@@ -171,6 +173,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 									}},
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 								{
 									Filter: &contract.Filter{Attributes: map[string]string{
@@ -178,6 +181,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 									}},
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -197,18 +201,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "z",
+							Uid:     BrokerUUID + "z",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
@@ -218,10 +223,12 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 									}},
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -374,7 +381,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 						},
 					},
@@ -404,16 +411,18 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -433,12 +442,13 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 							},
 						},
@@ -472,13 +482,14 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"type": "type1",
 									}},
@@ -500,13 +511,14 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"type": "type1",
 									}},
@@ -551,21 +563,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -573,6 +588,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -580,21 +596,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -602,6 +621,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -623,13 +643,14 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"type": "type1",
 									}},
@@ -637,10 +658,12 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -648,6 +671,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -655,21 +679,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -677,6 +704,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -721,21 +749,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -743,6 +774,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -750,17 +782,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -768,6 +802,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -789,21 +824,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -811,6 +849,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -818,17 +857,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -836,6 +877,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -843,6 +885,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"ext": "extval",
 									}},
@@ -883,21 +926,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -905,6 +951,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -912,17 +959,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -930,10 +979,12 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -941,21 +992,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -963,6 +1017,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -984,21 +1039,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1006,6 +1064,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1013,17 +1072,19 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1031,10 +1092,12 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1042,21 +1105,24 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1064,6 +1130,7 @@ func triggerReconciliation(t *testing.T, format string, configs broker.Configs)
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1149,16 +1216,18 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -1178,12 +1247,13 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID + "a",
+									Uid:           TriggerUUID + "a",
 								},
 							},
 						},
@@ -1210,7 +1280,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:     BrokerUUID,
+							Uid:    BrokerUUID,
 							Topics: []string{BrokerTopic()},
 						},
 					},
@@ -1267,21 +1337,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1289,6 +1362,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1296,21 +1370,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1318,6 +1395,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1339,13 +1417,14 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1353,10 +1432,12 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1364,21 +1445,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1386,6 +1470,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1418,21 +1503,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1440,6 +1528,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1447,17 +1536,19 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1465,6 +1556,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1472,6 +1564,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 							},
 						},
@@ -1490,21 +1583,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1512,6 +1608,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1519,17 +1616,19 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1537,6 +1636,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1569,21 +1669,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				NewConfigMapFromContract(&contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1591,6 +1694,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1598,17 +1702,19 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1616,10 +1722,12 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1627,21 +1735,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1649,6 +1760,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1670,21 +1782,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 				ConfigMapUpdate(&configs, &contract.Contract{
 					Resources: []*contract.Resource{
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1692,6 +1807,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1699,17 +1815,19 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID,
+							Uid:     BrokerUUID,
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1717,6 +1835,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
@@ -1724,21 +1843,24 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 							},
 						},
 						{
-							Id:      BrokerUUID + "a",
+							Uid:     BrokerUUID + "a",
 							Topics:  []string{BrokerTopic()},
 							Ingress: &contract.Ingress{IngressType: &contract.Ingress_Path{Path: receiver.Path(BrokerNamespace, BrokerName)}},
 							Egresses: []*contract.Egress{
 								{
 									Destination:   ServiceURL,
 									ConsumerGroup: TriggerUUID,
+									Uid:           TriggerUUID,
 								},
 								{
 									Destination:   "http://example.com/1",
 									ConsumerGroup: "1",
+									Uid:           "1",
 								},
 								{
 									Destination:   "http://example.com/2",
 									ConsumerGroup: "2",
+									Uid:           "2",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source2",
 									}},
@@ -1746,6 +1868,7 @@ func triggerFinalizer(t *testing.T, format string, configs broker.Configs) {
 								{
 									Destination:   "http://example.com/3",
 									ConsumerGroup: "3",
+									Uid:           "3",
 									Filter: &contract.Filter{Attributes: map[string]string{
 										"source": "source3",
 									}},
diff --git a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/testing/CoreObjects.java b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/testing/CoreObjects.java
index f7efb4619..b3236c555 100644
--- a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/testing/CoreObjects.java
+++ b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/testing/CoreObjects.java
@@ -61,7 +61,7 @@ public final class CoreObjects {
 
   public static DataPlaneContract.Resource resource1Unwrapped() {
     return DataPlaneContract.Resource.newBuilder()
-      .setId("1-1234")
+      .setUid("1-1234")
       .addTopics("1-12345")
       .addAllEgresses(Arrays.asList(
         egress11(),
@@ -78,7 +78,7 @@ public final class CoreObjects {
 
   public static DataPlaneContract.Resource resource2Unwrapped() {
     return DataPlaneContract.Resource.newBuilder()
-      .setId("2-1234")
+      .setUid("2-1234")
       .addTopics("2-12345")
       .addAllEgresses(Arrays.asList(
         egress13(),
diff --git a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapperTest.java b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapperTest.java
index cf7b09f1b..65ce3cc04 100644
--- a/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapperTest.java
+++ b/data-plane/core/src/test/java/dev/knative/eventing/kafka/broker/core/wrappers/ResourceWrapperTest.java
@@ -32,7 +32,7 @@ public class ResourceWrapperTest {
   public void idCallShouldBeDelegatedToWrappedResource() {
     final var id = "123-42";
     final var resource = new ResourceWrapper(
-      DataPlaneContract.Resource.newBuilder().setId(id).build()
+      DataPlaneContract.Resource.newBuilder().setUid(id).build()
     );
 
     assertThat(resource.id()).isEqualTo(id);
@@ -103,7 +103,7 @@ public class ResourceWrapperTest {
       Arguments.of(
         new ResourceWrapper(
           DataPlaneContract.Resource.newBuilder()
-            .setId("1234-id")
+            .setUid("1234-id")
             .build()
         ),
         new ResourceWrapper(
@@ -167,7 +167,7 @@ public class ResourceWrapperTest {
           DataPlaneContract.Resource.newBuilder()
             .setIngress(DataPlaneContract.Ingress.newBuilder()
               .setPath("/broker/test-event-transformation-for-trigger-v1-broker-v1-6wlx9"))
-            .setId("93ab71bd-9e3c-42ee-a0a2-aeec6dca48c9")
+            .setUid("93ab71bd-9e3c-42ee-a0a2-aeec6dca48c9")
             .addTopics(
               "knative-broker-test-event-transformation-for-trigger-v1-broker-v1-6wlx9-broker")
             .addEgresses(DataPlaneContract.Egress.newBuilder()
@@ -195,7 +195,7 @@ public class ResourceWrapperTest {
           DataPlaneContract.Resource.newBuilder()
             .setIngress(DataPlaneContract.Ingress.newBuilder()
               .setPath("/broker/test-event-transformation-for-trigger-v1-broker-v1-6wlx9"))
-            .setId("93ab71bd-9e3c-42ee-a0a2-aeec6dca48c9")
+            .setUid("93ab71bd-9e3c-42ee-a0a2-aeec6dca48c9")
             .addTopics(
               "knative-broker-test-event-transformation-for-trigger-v1-broker-v1-6wlx9-broker")
             .addEgresses(DataPlaneContract.Egress.newBuilder()
diff --git a/data-plane/receiver/src/test/java/dev/knative/eventing/kafka/broker/receiver/RequestHandlerTest.java b/data-plane/receiver/src/test/java/dev/knative/eventing/kafka/broker/receiver/RequestHandlerTest.java
index 3351afefd..c2548ac87 100644
--- a/data-plane/receiver/src/test/java/dev/knative/eventing/kafka/broker/receiver/RequestHandlerTest.java
+++ b/data-plane/receiver/src/test/java/dev/knative/eventing/kafka/broker/receiver/RequestHandlerTest.java
@@ -182,13 +182,13 @@ public class RequestHandlerTest {
     final var checkpoint = context.checkpoint();
 
     final var resource1 = new ResourceWrapper(DataPlaneContract.Resource.newBuilder()
-      .setId("1")
+      .setUid("1")
       .addTopics("topic")
       .setBootstrapServers("kafka-1:9092,kafka-2:9092")
       .build());
 
     final var resource2 = new ResourceWrapper(DataPlaneContract.Resource.newBuilder()
-      .setId("1")
+      .setUid("1")
       .addTopics("topic")
       .setBootstrapServers("kafka-1:9092,kafka-3:9092")
       .build());
@@ -230,13 +230,13 @@ public class RequestHandlerTest {
     final var checkpoint = context.checkpoint();
 
     final var resource1 = new ResourceWrapper(DataPlaneContract.Resource.newBuilder()
-      .setId("1")
+      .setUid("1")
       .addTopics("topic")
       .setBootstrapServers("kafka-1:9092,kafka-2:9092")
       .build());
 
     final var resource2 = new ResourceWrapper(DataPlaneContract.Resource.newBuilder()
-      .setId("1")
+      .setUid("1")
       .addTopics("topic")
       .setBootstrapServers("kafka-1:9092,kafka-2:9092")
       .build());
diff --git a/data-plane/tests/src/test/java/dev/knative/eventing/kafka/broker/tests/DataPlaneTest.java b/data-plane/tests/src/test/java/dev/knative/eventing/kafka/broker/tests/DataPlaneTest.java
index 796ecf38d..a490fe3b0 100644
--- a/data-plane/tests/src/test/java/dev/knative/eventing/kafka/broker/tests/DataPlaneTest.java
+++ b/data-plane/tests/src/test/java/dev/knative/eventing/kafka/broker/tests/DataPlaneTest.java
@@ -166,7 +166,7 @@ public class DataPlaneTest {
           .addTopics(TOPIC)
           .setIngress(DataPlaneContract.Ingress.newBuilder().setPath(format("/%s/%s", BROKER_NAMESPACE, BROKER_NAME)))
           .setBootstrapServers(bootstrapServers())
-          .setId(UUID.randomUUID().toString())
+          .setUid(UUID.randomUUID().toString())
           .build()),
         Set.of(
           new EgressWrapper(DataPlaneContract.Egress.newBuilder()