We want to ensure ConsumerGroupHeartbeatRequest is as lightweight as possible, so a lot of fields in it don't need to be resend. An example would be the rebalanceTimeoutMs, currently we have the following code:
We should encapsulate these once-used fields into a class such as HeartbeatMetdataBuilder, and it should maintain a state of whether a certain field needs to be sent or not.
Note that, currently only 3 fields are mandatory in the request:
Note that on retriable errors and network errors (ex. timeout) a full request should be sent to the broker.