opensource4you / astraea

釋放kafka的無限潛能
Apache License 2.0
129 stars 46 forks source link

[BACKUP] 支援壓縮演算法 #1822

Open chia7712 opened 1 year ago

chia7712 commented 1 year ago

backup 工具可以幫助我們快速將 topic 資料備份到指定的檔案系統,考量資料可能非常龐大,在資料內容適合壓縮的狀態下,支援壓縮演算法可以幫助我們更有效地將資料備份出來,因此這個議題用來追蹤以下幾個功能:

  1. 可以透過參數指定“備份出來”的資料是用哪一種壓縮演算法
  2. 將“備份出來”的資料倒回去的時候,系統可以自行判讀要用哪一種”壓縮演算法“
  3. 壓縮演算法至少要支援 gzip,其他 lz4 snappy zstd 則看是否可行
Haser0305 commented 1 year ago

壓縮演算法至少要支援 gzip,其他 lz4 snappy zstd 則看是否可行

目前專案中的 RecordWriterBuilder 中可以透過 compression 建立使用 gzip 的 ourput stream,那我先完成在 exporter 中可以透過可選參數 'compression.type' 供使用者設定要使用的壓縮方法。

將“備份出來”的資料倒回去的時候,系統可以自行判讀要用哪一種”壓縮演算法“

如果是第三點的那幾種壓縮方式,透過magic number來判斷壓縮方式不知是否恰當?

chia7712 commented 1 year ago

如果是第三點的那幾種壓縮方式,透過magic number來判斷壓縮方式不知是否恰當?

Magic number比較適合用來描述「整個檔案該如何讀取 or 寫入」,壓縮的資訊只應該是該檔案 tail的一部分

換句話說,我們的輸出檔案應該要在尾巴押上metadata了

jackyoh commented 1 year ago

如果只是單純知道檔案是哪種類型,應該可以使用以下的寫法:

import java.io.File;
import java.nio.file.Files;
public class Main {
    public static void main(String[] args) {
        try {
            File file = new File("/home/user1/test.gz");
            String fileType = Files.probeContentType(file.toPath());
            System.out.println(fileType);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }
}

一個小建議,還是要看實際的需求來決定寫法。

Haser0305 commented 1 year ago

非常感謝建議 我會試試看這方法的效果