...
Code Block | ||
---|---|---|
| ||
MessageSet => FirstOffset => int64 Length => int32 CRC => int32 Magic => int8 /* bump up to “2” */ Attributes => int16 OffsetDelta => int32 {NEW} FirstTimestamp => int64 {NEW} MaxTimestampDelta => int64 {NEW} PID => int64 {NEW} Epoch => int16 {NEW} FirstSequence => int32 {NEW} Messages => Message1, Message2, … , MessageN {NEW} Message => {ALL FIELDS NEW} Length => uintVar Attributes => int8 TimestampTimestampDelta => intVar OffsetDelta => uintVar KeyLen => uintVar [OPTIONAL] Key => data [OPTIONAL] Value => data [OPTIONAL] CRC => int32 |
The ability to store some fields only at the message set level allows us to conserve space considerably when batching messages into a message set. For example, there is no need to write the PID within each message since it will always be the same for all messages within each message set. In addition, by separating the message level format and message set format, now we can also use variable-length types for the inner (relative) offsets and save considerably over a fixed 8-byte field size.
...