Giving this a little more thought, I imagine sending to a topic is the most common case, so maybe it's an overload worth having. Also, if `SendTarget` is just a marker interface, we could let `TopicPartition` implement it directly. Then we have:
interface SendTarget; class TopicPartition implements SendTarget; CompletionStage<RecordMetadata> send(String topic, Record record); CompletionStage<RecordMetadata> send(SendTarget target, Record record); The `SendTarget` would give us a lot of flexibility in the future. It would give us a couple options for topic ids. We could either have an overload of `send` which accepts `Uuid`, or we could add a `TopicId` type which implements `SendTarget`. -Jason On Sat, Jan 30, 2021 at 1:11 PM Jason Gustafson <ja...@confluent.io> wrote: > Yeah, good question. I guess we always tend to regret using lower-level > types in these APIs. Perhaps there should be some kind of interface: > > interface SendTarget > class TopicIdTarget implements SendTarget > class TopicTarget implements SendTarget > class TopicPartitionTarget implements SendTarget > > Then we just have: > > CompletionStage<RecordMetadata> send(SendTarget target, Record record); > > Not sure if we could reuse `Record` in the consumer though. We do have > some state in `ConsumerRecord` which is not present in `ProducerRecord` > (e.g. offset). Perhaps we could provide a `Record` view from > `ConsumerRecord` for convenience. That would be useful for use cases which > involve reading from one topic and writing to another. > > -Jason > > On Sat, Jan 30, 2021 at 12:29 PM Ismael Juma <ism...@juma.me.uk> wrote: > >> Interesting idea. A couple of things to consider: >> >> 1. Would we introduce the Message concept to the Consumer too? I think >> that's what .NET does. >> 2. If we eventually allow a send to a topic id instead of topic name, >> would >> that result in two additional overloads? >> >> Ismael >> >> On Sat, Jan 30, 2021 at 11:38 AM Jason Gustafson <ja...@confluent.io> >> wrote: >> >> > For the sake of having another option to shoot down, we could take a >> page >> > from the .net client and separate the message data from the destination >> > (i.e. topic or partition). This would get around the need to use a new >> > verb. For example: >> > >> > CompletionStage<RecordMetadata> send(String topic, Message message); >> > CompletionStage<RecordMetadata> send(TopicPartition topicPartition, >> Message >> > message); >> > >> > -Jason >> > >> > >> > >> > On Sat, Jan 30, 2021 at 11:30 AM Jason Gustafson <ja...@confluent.io> >> > wrote: >> > >> > > I think this still makes sense as a separate KIP. For KIP-691, we are >> > just >> > > looking to help define the error contract for the new API. >> > > >> > > -Jason >> > > >> > > On Sat, Jan 30, 2021 at 8:39 AM Ismael Juma <ism...@juma.me.uk> >> wrote: >> > > >> > >> Are we saying that we won't pursue this KIP in favor of the other >> one? >> > >> >> > >> Ismael >> > >> >> > >> On Sat, Jan 30, 2021, 4:15 AM Chia-Ping Tsai <chia7...@apache.org> >> > wrote: >> > >> >> > >> > hi Jason >> > >> > >> > >> > Thanks for your response. "transmit" is good to me. >> > >> > >> > >> > As we discussed by email, KIP-706 is going to be merged to KIP-691( >> > >> > https://cwiki.apache.org/confluence/x/PSfZCQ). Hence, please feel >> > free >> > >> to >> > >> > replace "produce" by "transmit" in KIP-691. >> > >> > >> > >> > Best, >> > >> > Chia-Ping >> > >> > >> > >> > On 2021/01/30 00:48:38, Jason Gustafson <ja...@confluent.io> >> wrote: >> > >> > > Hi Chia-Ping, >> > >> > > >> > >> > > I think this is a great idea. It is a pity that we cannot >> continue >> > to >> > >> use >> > >> > > the `send` verb, but I don't see how we can. I know we considered >> > >> > > `transmit` as another option which is closer to `send`. That >> would >> > >> avoid >> > >> > > the redundancy when people choose the common "producer" variable >> > name. >> > >> > > >> > >> > > producer.transmit >> > >> > > >> > >> > > instead of >> > >> > > >> > >> > > producer.produce >> > >> > > >> > >> > > A couple alternatives might be `write` or `append`. I'm happy >> with >> > >> > > `produce` as well, but curious if others have thoughts. >> > >> > > >> > >> > > -Jason >> > >> > > >> > >> > > >> > >> > > On Wed, Jan 20, 2021 at 9:37 AM Chia-Ping Tsai < >> chia7...@apache.org >> > > >> > >> > wrote: >> > >> > > >> > >> > > > Dear all, >> > >> > > > >> > >> > > > I'd like to start the discussion thread for KIP-706: >> > >> > > > >> > >> > >> > >> >> > >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=100829459 >> > >> > > > >> > >> > > > KIP-706 is proposing to introduce new API "CompletionStage >> > >> > > > produce(record)" to Producer. Kafka users can leverage >> > >> CompletionStage >> > >> > to >> > >> > > > write asynchronous non-blocking code. CompletionStage is more >> > >> powerful >> > >> > than >> > >> > > > Future and callback. Also, the code using Future and callback >> can >> > be >> > >> > easily >> > >> > > > re-written by CompletionStage. >> > >> > > > >> > >> > > > Cheers, >> > >> > > > Chia-Ping >> > >> > > > >> > >> > > > >> > >> > > >> > >> > >> > >> >> > > >> > >> >