class WaterDrop::Producer::Variant

Object that acts as a proxy allowing for alteration of certain low-level per-topic configuration and some other settings that users may find useful to alter, without having to create new producers with their underlying librdkafka instances.

Since each librdkafka instance creates at least one TCP connection per broker, creating separate objects just to alter thing like ‘acks` may not be efficient and may lead to extensive usage of TCP connections, especially in bigger clusters.

This variant object allows for “wrapping” of the producer with alteration of those settings in such a way, that two or more alterations can co-exist and share the same producer, effectively sharing the librdkafka client.

Since this is an enhanced ‘SimpleDelegator` all `WaterDrop::Producer` APIs are preserved and a variant alteration can be used as a regular producer. The only important thing is to remember to only close it once.

@note Not all settings are alterable. We only allow to alter things that are safe to be

altered as they have no impact on the producer. If there is a setting you consider
important and want to make it alterable, please open a GH issue for evaluation.

@note Please be aware, that variant changes also affect buffers. If you overwrite the

`max_wait_timeout`, since buffers are shared (as they exist on producer level), flushing
 may be impacted.

@note ‘topic_config` is validated when created for the first time during message production.

This means, that configuration error may be raised only during dispatch. There is no
way out of this, since we need `librdkafka` instance to create the references.