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

[EXPORTER] Add metadata in record writer #1832

Merged
merged 5 commits into from
Jul 26, 2023

Conversation

Haser0305
Copy link
Collaborator

@Haser0305 Haser0305 commented Jul 17, 2023

#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 中,會不方便再寫入無壓縮資訊。

During the creation of a new recordWriter, the exporter task will transmit both the configuration and the first record for writing metadata. A new method has been added to the SinkContext for retrieving the connector name to be used within the metadata.
…of a file.

The reason for creating a new version instead of replacing version 0 is because the importer is not yet able to handle files with metadata information.
While it can accept V1 files, it was only processing the initial data and not the following metadata
@chia7712
Copy link
Contributor

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

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

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

@Haser0305
Copy link
Collaborator Author

Haser0305 commented Jul 21, 2023

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

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

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

  • topic name
  • partition number
  • 1st record offset/timestamp

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

@chia7712
Copy link
Contributor

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

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

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

Removing these data from metadata to give writers more flexibility. This allows writers to write data without restrictions, allowing the exporter to decide how they want to handle the data.
@chia7712
Copy link
Contributor

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

Copy link
Contributor

@chia7712 chia7712 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Haser0305
Copy link
Collaborator Author

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

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

@Haser0305 Haser0305 merged commit 4140b68 into opensource4you:main Jul 26, 2023
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

Successfully merging this pull request may close these issues.

2 participants