簡體   English   中英

使用 ksqlDB 在單個主題中使用多種事件類型實現 CDC?

[英]Using ksqlDB to implement CDC using multiple event types in a single topic?

我有以下情況,我有一個包含許多記錄類型的 Apache Kafka 主題。

例如:

  1. 用戶創建
  2. 用戶更新
  3. 用戶已刪除
  4. 另一個記錄類型
  5. ...

我希望在列出的三個User*記錄類型上實現 CDC,這樣最后,我就有了一個包含所有用戶信息的最新 KTable。

我怎樣才能在 ksqlDB 中做到這一點? 據我所知,由於 Debezium 和其他 CDC 連接器也從單個主題獲取數據,我至少知道這應該是可能的。

我已經閱讀了一段時間的 Confluent 文檔,但我似乎找不到任何與我的用例非常相關的內容(CDC 使用現有主題)。 如果有什么我忽略了,我也非常感謝相關文檔的鏈接。

我假設,至少,記錄必須具有相同的,ksqlDB 才能匹配它們。 所以我的問題歸結為:

  1. 我將如何教 ksqlDB 是插入、更新和刪除?
  2. 鍵匹配是硬性要求,還是我們可以使用其他連接/匹配謂詞?

我能想到的一種可能性基本上是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM