public static Properties getProperties(KafkaConfigDoc doc) {
        Properties properties = new Properties();
        if (doc.getData() != null && !doc.getData().isEmpty()) {
            StringReader reader = new StringReader(doc.getData());
            try {
                properties.load(reader);
            } catch (IOException ex) {
                LOGGER.error("Unable to read kafka properties from {} - {}", doc.getName(), doc.getUuid(), ex);
            }
        }
        return properties;
    }
Class to provide shared {@link KafkaProducer} instances wrapped inside a {@link SharedKafkaProducer}.
We want one {@link KafkaProducer} per {@link KafkaConfigDoc}, however the config in a {@link KafkaConfigDoc}
can change at runtime so on each request for a {@link SharedKafkaProducer} we need to check if the
{@link KafkaConfigDoc} has changed since the time we created it. New calls to
{@link KafkaProducerFactory#getSharedProducer(DocRef)} will always get a {@link SharedKafkaProducer} for the
latest config. {@link KafkaProducer}
stroom-kafka/stroom-kafka-impl/src/main/java/stroom/kafka/impl/KafkaProducerFactoryImpl.java