Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BACKUP] 新增可選擇備份時間區段功能 #1621

Open
1 of 2 tasks
Haser0305 opened this issue Mar 29, 2023 · 7 comments
Open
1 of 2 tasks

[BACKUP] 新增可選擇備份時間區段功能 #1621

Haser0305 opened this issue Mar 29, 2023 · 7 comments

Comments

@Haser0305
Copy link
Collaborator

Haser0305 commented Mar 29, 2023

預計針對 backup 工具增加可以選擇 exporter 要針對哪個時間區段的資料內容並備份出來。
等 exporter 指定輸出時間區段的功能完成後,要新增輸出的資料讓 importer 這一端可以快速查找時間區段的 offset 讓,以便達到 importer 端指定輸入時間區段的功能。

預定完成事項

  • exporter 端指定輸出offset 起點
  • 新增 exporter 輸出包含時間點與相對應得 offset 資料
  • 使 importer 可以指定還原起始 offset
@chia7712
Copy link
Contributor

感謝開立這個議題。

我們可以先以簡單的用法開始,也就是 topic + 時間。

所以你覺得參數該怎麼設計可以讓使用者方便去填寫上述的資料描述?例如:

  1. 只備份 topic a
  2. 除了 topic a 以外都要備份
  3. 備份 topic a 從昨天12點開始的資料
  4. 除了 topic a 的12點到13點的資料以外,其他都要備份

@Haser0305
Copy link
Collaborator Author

Haser0305 commented Apr 6, 2023

  1. 只備份 topic a
  2. 除了 topic a 以外都要備份
  3. 備份 topic a 從昨天12點開始的資料
  4. 除了 topic a 的12點到13點的資料以外,其他都要備份

當下實做的部份應該會以 創建 Exporter 的層級來實做,因此目前會想說新增兩組參數 include.timestampsexclude_timestamps,這兩組參數分別可以指定需要的時間與要排除的時間。
使用方式如下:
指定12點到4點的資料,但不要2點到3點這段時間的內容,在建立 exporter 時,時間部份的參數是

{
  "name": "...",
  "config": {
    ...
    "include.timestamp": [
      {
        "start_timestamp": "timestamp of 12 pm",
        "end_timestamp": "timestamp of 4 pm"
      }
    ],
    "exclude.timestamp": [
      {
        "start_timestamp" : "timestamp of 2 pm",
        "end_timestamp": "timestamp of 3 pm"
      }
    ]
  }
}

針對 topic 應該就維持原本的 topics 參數,如果要實現功能2.指定參數外的話,應該可以在 app 或是 gui 層級透過 admin 取得所有 topics 再過濾掉的方式使用。

以上是目前針對 exporter 方面實現此功能的暫定想法

@chia7712
Copy link
Contributor

chia7712 commented Apr 6, 2023

@Haser0305 感謝回覆,幾個想法:

  1. 如果要直接以 json 的形式的話,要否直接整合到 web APIs 上面?
  2. 同上,如果是放到 web APIs 上的話,我們可以從 restful APIs 的用法上去思考,例如我們可以設計一個元素用來代表”某個資料範圍“
{
  "targets": [
    "topic": "xxx",
    "pattern": "plain",
    "partition": 1,
    "range": {
      "from": 1000,
      "to": 4444,
      "exclude": false,
      "type": "timestamp"
    }
  ]
}

pattern用來指定 topic 名稱的比對方式,支援 plainwildcardregex,這樣就可以滿足範例 1 and 2
partition and range都是選填,預設就是”全部“,所以可以寫 from=xxxx來滿足範例 3
exclude代表這個區段的資料要留或是不留,所以可以寫from=12, to=13, exclude=true來滿足範例4
type則是開放給使用者用offset來標記資料範圍

這樣你覺得如何?

當然這樣的設計還少考量幾點點:

  1. 如何帶上 kafka connector 的設定
  2. 如何描述 filesystem 的參數

就看你如何接續完成

@Haser0305
Copy link
Collaborator Author

目前 offset 的部分已經可以順利執行並支援 reset offset 的方式跳過不必要的資料。
而 timestamp 因為 task 在設計時好像無法直接操作到worker sinktask 所擁有的 consumer 的部分,因此無法使用 consumer.offsetForTime 之類的方法透過 timestamp 查詢 offset,所以有在想是否要在 task 裡面建立一個專門查找的 consumer,這 cosumer 只負責透過 timestamp 查詢 offset 等操作,並不會消費資訊。

不知道以上對於 timestamp 的應對方式恰不恰當,想詢問看看

@chia7712
Copy link
Contributor

chia7712 commented May 8, 2023

@Haser0305 可否先分享一下現在如何處理offset的問題?

@Haser0305
Copy link
Collaborator Author

Haser0305 commented May 8, 2023

@Haser0305 可否先分享一下現在如何處理offset的問題?

那我現在先建立針對 offset 處理方式的 pr,詳細的內部實作方式我在那個 pr 裡面敘述
這樣方便嗎?
或是我先在下方回覆中先描述我大概的處理方式

@chia7712
Copy link
Contributor

chia7712 commented May 8, 2023

那我現在先建立針對 offset 處理方式的 pr,詳細的內部實作方式我在那個 pr 裡面敘述
這樣方便嗎?
或是我先在下方回覆中先描述我大概的處理方式

先以這個 offset 開立 PR 好了,謝謝

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants