opensource4you / astraea

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

[EXPORTER] Add metadata in record writer #1832

Closed Haser0305 closed 1 year ago

Haser0305 commented 1 year ago

1830

更新到了版本1,現在備份的文件尾部增加了檔案的 metadata,有以下資訊

  1. connector name -> 255 Bytes
  2. ~topic name -> 255 Bytes~
  3. ~partition number -> 4 Bytes~
  4. ~1st record offset -> 8 Bytes~
  5. ~1st record timestamp -> 8 Bytes~
  6. record count -> 4 Bytes
  7. roll.duration in mills -> 8 Bytes
  8. compression.type -> 10Bytes

以上總共 ~552Bytes~ 277 Bytes,後續 importer 要先讀取 metadata 可以固定跳到尾部前的 metadata 位置先讀取。 目前針對 importer 中的測試部分,因為還沒有針對 metadata 的部分做處理,因此在判斷有無下一筆資料時遇到 metadata 的 protocol buffer 錯誤會先不理會,等到後續更新 v1 版本的 importer 時可以把這段拔掉。

現在因為要針對些 connector 與 1st record 等資料作紀錄,導致 v1 版的 RecordWriter 所需參數增加到三個。 分別為

  1. configuration: 為了取得 connector name, roll.duration 或 compression.type 等創建 connector 時的資訊
  2. record: 跟 1st record 相關資訊
  3. outputStream

本次取消在 RecordWriterBuilder 中就依照 compression.type 就創建壓縮的 outputStream 如 GZIPOutputStream,而是改為在 RecordWrtier 中透過 configuration 來判斷並處理壓縮的原因,其原因是為了在關閉前寫上無壓縮資訊的 metadata 的緣故。如果按照前方法直接將 GZIPOutputStream 或類似的物件傳到 recordWriter 中,會不方便再寫入無壓縮資訊。

chia7712 commented 1 year ago

topic name -> 255 Bytes partition number -> 4 Bytes

不好意思,可能是我之前沒有想到這點,有一個設計上的討論:

這裡是假設一個檔案裡面放的 record 都是同一個 topic-partition 嗎?我“印象中”再放入metadata之前應該沒有這個限制,假如為了加入metadata反而多了這個很硬的限制,好像有點可惜,你覺得有機會調整嗎?

Haser0305 commented 1 year ago

這裡是假設一個檔案裡面放的 record 都是同一個 topic-partition 嗎?我“印象中”再放入metadata之前應該沒有這個限制,假如為了加入metadata反而多了這個很硬的限制,好像有點可惜,你覺得有機會調整嗎?

以 exporter 輸出的檔案來說是會都同一個 topic-partition。在 #1188 中的規劃的輸出檔案的結構是:/root/{topic}/{partition}/{start_offset},這個到目前為止是都維持這版本。因此當下同一個檔案中的 topic partition 是會都一樣的。

如果未來會有混合不同 topic-partition 的資料在同一個檔案的話,那麼以下的資料或許可以拿掉:

第一筆資料的資訊拿掉是因為沒辦法以這些的資訊來推測後續資料的範圍,畢竟資料會從不同的 topic-partition 寫入

chia7712 commented 1 year ago

如果未來會有混合不同 topic-partition 的資料在同一個檔案的話,那麼以下的資料或許可以拿掉: topic name partition number 1st record offset/timestamp 第一筆資料的資訊拿掉是因為沒辦法以這些的資訊來推測後續資料的範圍,畢竟資料會從不同的 topic-partition 寫入

從 writer 的角度來說,有這個限制會很可惜,這個限制應該要放在“用”的人手上,也就是 exporter “特意”讓同一個檔案裡的 records 都屬於同一個 topic partition

所以可以先拿掉,等之後會用 metadata 來做更多索引的時候再討論如何放上去

chia7712 commented 1 year ago

可否看一下錯誤是否有關?無關的話就可以合併

Haser0305 commented 1 year ago

可否看一下錯誤是否有關?無關的話就可以合併

在本地跑數次測試,main 與這支 bracnh 結果上沒有差異,錯誤是 timeout,因此判斷是沒有關係。