Hi, Tommy!

thanks for the feeback - I've reopened the PR adding the ctor overload.

I've drafted a ProducerBuilder, which can be used like:
----
        final Producer<Integer, String> producer = new ProducerBuilder()
                .partitionerClass(DefaultPartitioner.class)
                .keySerializer(IntegerSerializer.class)
                .valueSerializer(StringSerializer.class)
                .bootstrapServers("localhost:9092")
                .build();

        producer.send(new ProducerRecord("mytopic", myKey, "the-val",
myHeaderIterable));
----
Internally the builder populates a property and on build() it delegates it
to the KafkaProducer ctor.
code: https://gist.github.com/matzew/b98dbacf7f40f27c9f666b736a2428d3

I think this reads much nicer, than directly dealing w/ the current way for
creating conumers and producers.

How do people feel about this?

thanks,
Matthias



On Thu, Jul 5, 2018 at 3:11 PM Thomas Becker <thomas.bec...@tivo.com> wrote:

> Personally, I like the idea of builders for the producer/consumer
> themselves, but I'm less enthusiastic about one for ProducerRecord. Mostly
> because I think the following is overly verbose/reads poorly:
>
> producer.send(ProducerRecord.builder()
> .topic("mytopic")
>     .key("Key")
>     .value("the-val")
>     .headers(myHeaderIterable)
>     .build());
>
> as compared to:
>
> producer.send(new ProducerRecord("mytopic", "Key", "the-val",
> myHeaderIterable));
>
> I think constructor overloads are fine for small data classes like this.
> The producer/consumer clietns themselves have a lot of options represented
> by various configuration keys, and a builder pattern makes these easily
> discoverable in code.
>
> -Tommy
>
> On Wed, 2018-07-04 at 15:42 +0200, Matthias Wessendorf wrote:
>
> Hi,
>
>
> I was filing KAFKA-7059 ([1]) and sent a PR adding a new ctor:
>
> --
>
> public ProducerRecord(String topic, K key, V value, Iterable<Header>
>
> headers)
>
> ---
>
>
> One reasonable comment on the PR was instead of doing constructor
>
> overloading, why not working on a builder for the ProducerRecord class.
>
>
> I think this is generally a nice idea I was wondering if there is much
>
> interest in ?
>
>
> Sample:
>
> ---
>
> final ProducerRecord<String, String> myRecord = ProducerRecord.builder() //
>
> or an exposed builder
>
>     .topic("mytopic")
>
>     .key("Key")
>
>     .value("the-val")
>
>     .headers(myHeaderIterable)
>
>     .build();
>
> ---
>
>
> While at it - instead of just offering a builder for the "ProducerRecord"
>
> class, why not adding a builder for the "KafkaProducer" and "KafkaConsumer"
>
> clazzes.
>
>
> ---
>
> final KafkaProducer<String, String> myProducer = KafkaProducer.builder() //
>
> or an exposed builder clazz
>
>     .config(myProducerConfig)
>
>     .keySerializer(myStringSerializer)
>
>     .valueSerializer(myStringSerializer)
>
>     .build();
>
> ---
>
>
> to even make the above more nice, I think the "ProducerConfig" (analog the
>
> ConsumerConfig) configuration options could be also made accesible w/ this
>
> fluent API - instead of properties/map, which is what now dominates the
>
> creation of the Consumers/Producers.
>
>
>
> Any thoughts?   If there is interest, I am happy to start a KIP w/ a first
>
> draft of the suggested API!
>
>
> Cheers,
>
> Matthias
>
>
> [1] https://issues.apache.org/jira/browse/KAFKA-7059
>
>
>
>
>
> ________________________________
>
> This email and any attachments may contain confidential and privileged
> material for the sole use of the intended recipient. Any review, copying,
> or distribution of this email (or any attachments) by others is prohibited.
> If you are not the intended recipient, please contact the sender
> immediately and permanently delete this email and any attachments. No
> employee or agent of TiVo Inc. is authorized to conclude any binding
> agreement on behalf of TiVo Inc. by email. Binding agreements with TiVo
> Inc. may only be made by a signed written agreement.
>


-- 
Matthias Wessendorf

github: https://github.com/matzew
twitter: http://twitter.com/mwessendorf

Reply via email to