the common "stack" we envision at linkedin would consist of (at least) the following components that add headers to every outgoing request:
1. auditing/"lineage" - appends a header containing "node" (hostname etc), time (UTC time) and destination (cluster/topic). these accumulate as requests get mirrored between clusters 2. serialization - sets a header containing a schema identifier to allow deserialization 3. client-side encryption - would probably set a header identifying the key/scheme used 4. internal "billing" there are also several other teams at linkedin that would use headers (although its unclear yet if via interceptors or by directly manipulating requests) if headers are made completely immutable (as the entire request object currently is) we would end up copying (parts of) every msg 4 times. I havent benchmarked but this seems like it would have an impact to me. looking elsewhere rabbitMQ and http components both use mutable request objects (rabbitMW's BasicProperties object, http components' addHeader method). how common is it right now for instances of ProducerRecord to actually be reused? do people really have things like publis static final ProducerRecord MY_FAVORITE_REQUEST = ... ?