public <K, V> ShareConsumerDelegate<K, V> create(final ConsumerConfig config,
                                                     final Deserializer<K> keyDeserializer,
                                                     final Deserializer<V> valueDeserializer) {
        try {
            return new ShareConsumerImpl<>(config, keyDeserializer, valueDeserializer);
        } catch (KafkaException e) {
            throw e;
        } catch (Throwable t) {
            throw new KafkaException("Failed to construct Kafka share consumer", t);
        }
    }
{@code ShareConsumerDelegateCreator} implements a quasi-factory pattern to allow the caller to remain unaware of the
underlying {@link ShareConsumer} implementation that is created. This provides the means by which
{@link KafkaShareConsumer} can remain the top-level facade for implementations, but allow different implementations
to co-exist under the covers.

<p>
<em>Note</em>: this is for internal use only and is not intended for use by end users. Internal users should
not attempt to determine the underlying implementation to avoid coding to an unstable interface. Rather, it is
the {@link ShareConsumer} API contract that should serve as the caller's interface.
clients/src/main/java/org/apache/kafka/clients/consumer/internals/ShareConsumerDelegateCreator.java