[英]Using ksqlDB to implement CDC using multiple event types in a single topic?
我有以下情況,我有一個包含許多記錄類型的 Apache Kafka 主題。
例如:
我希望在列出的三個User*
記錄類型上實現 CDC,這樣最后,我就有了一個包含所有用戶信息的最新 KTable。
我怎樣才能在 ksqlDB 中做到這一點? 據我所知,由於 Debezium 和其他 CDC 連接器也從單個主題獲取數據,我至少知道這應該是可能的。
我已經閱讀了一段時間的 Confluent 文檔,但我似乎找不到任何與我的用例非常相關的內容(CDC 使用現有主題)。 如果有什么我忽略了,我也非常感謝相關文檔的鏈接。
我假設,至少,記錄必須具有相同的鍵,ksqlDB 才能匹配它們。 所以我的問題歸結為:
我能想到的一種可能性基本上是 CDC 已經這樣做了:將每個傳入記錄視為一個新條目,這樣我就可以在 KTable 中擁有一個緩慢變化的維度,對鍵進行分組並選擇具有例如最新時間戳的條目.
所以,是這樣的:
CREATE TABLE users AS
SELECT user.user_id,
latest_by_offset(user.name) AS name,
latest_by_offset(user.email),
CASE WHEN record.key = UserDeleted THEN true ELSE FALSE END,
user.timestamp,
...
FROM users
GROUP BY user.user_id
EMIT CHANGES;
可能(例如使用ROWKEY
作為record.key
)? 如果沒有,例如 Debezium 是如何做到的?
一般模式是沒有不同的模式類型; 只是User
。 然后,任何唯一鍵(例如,用戶 ID)的第一條記錄都是插入。 之后,相同鍵的任何非空值都會被更新(通常要求所有字段都是值的一部分,有效地在表中進行“替換”操作)。 刪除是由為鍵發送空值(墓碑事件)引起的。
如果您有多個模式,最好創建一個新的流來清除任何刪除事件,將創建和更新統一到您想要信息的公共模式,並過濾您想要忽略的事件類型。
例如,Debezium 是如何做到的?
對於使用來自 Debezium 主題的數據,您可以使用轉換來“提取新記錄狀態”。 它不會為您創建任何表格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.