Jay,

Comments inlined.

On Tue, Jan 22, 2013 at 10:15 AM, Jay Kreps <jay.kr...@gmail.com> wrote:

> Hey Evan,
>
> Great points, some comments:
> - Not sure if I understand what you mean by separating consumer and main
> logic.
>

I just meant having a separate Scala/Java client jar, so it's more
lightweight and easier to build independently.... kind of like the
consumers for the other languages.


> - Yes, cross-building, I think this is in progress now for kafka as a whole
> so it should be in either 0.8 or 0.8.1
> - Yes, forgot to mention offset initialization, but that is definitely
> needed.
>
> For the hasNext functionality, even that is not very good since if you have
> two streams and want to take the next message from either you would have to
> busy wait calling hasNext on both in a loop.
>
> An alternative would be something like
> val client = new ConsumerClient(topics, config)
> client.select(timeout: Long): Iterator[MessageAndMetadata]
>
> This method would have no internal threading. It would scatter-gather over
> the topic/partitions assigned to this consumer (whether they are statically
> or dynamically assigned would be specified in the config). The select call
> would internally just do an epoll/select on all the connections and return
> the first message set it gets back or an empty list if it hits the timeout
> and no one has responded.
>

Hm, I like that API actually.  It would definitely be more flexible.


>
> This api is less intuitive then the blocking iterator, but more flexible
> and enables a better, faster implementation. There would be no threads
> aside from the client's thread. It allows non-blocking or blocking
> consumption. And it generalizes easily to consuming from many
> topics/partitions simultaneously.
>
> We could implement an iterator like wrapper for this to ease the transition
> that just used this api under the covers.
>
> Anyhow this is a ways out, and we haven't really had any proposals or
> discussions on it, but this is what I was thinking.
>
> -Jay
>
>
>
>
> On Tue, Jan 22, 2013 at 9:37 AM, Evan Chan <e...@ooyala.com> wrote:
>
> > Jay,
> >
> > For the consumer:
> > - Separation of the consumer logic from the main logic
> > - Making it easier to build the consumer for different versions of Scala
> > (say 2.10)
> > - Make it easier to read from any offset you want, while being able to
> keep
> > partition management features
> > - Better support for Akka and other non-blocking / event-based frameworks
> > (instead of a timeout, implement true hasNext functionality, for example)
> >
> > thanks,
> > Evan
> >
> >
> > On Mon, Jan 21, 2013 at 9:27 AM, Jay Kreps <jay.kr...@gmail.com> wrote:
> >
> > > It's worth mentioning that we are interested in exploring potential
> > > generalizations of the producer and consumer API, but as a practical
> > matter
> > > most of the committers are working on getting a stable 0.8 release out
> > the
> > > door. So an improved consumer and producer api would be a 0.9 feature.
> > >
> > > If you have a concrete thing you are trying to do now that is awkward
> it
> > > would be great to hear about the use case.
> > >
> > > Possible goals of improving the apis and client impls would include the
> > > following:
> > >
> > > Producer:
> > > 1. Include the offset in the information returned to the producer
> > > 2. Pipeline producer requests to improve throughput for synchronous
> > > production
> > >
> > > Consumer
> > > 1. Simplify api while supporting various advanced use cases like
> > > multi-stream consumption
> > > 2. Make partition assignment optional and server-side (this is
> currently
> > > the difference between the zk consumer and the simple consumer)
> > > 3. Make offset management optional
> > > 4. Remove threading from the consumer
> > > 5. Simplify consumer memory management
> > >
> > > -Jay
> > >
> > >
> > >
> > >
> > > On Mon, Jan 21, 2013 at 8:05 AM, Jun Rao <jun...@gmail.com> wrote:
> > >
> > > > No, but you can implement it in your application.
> > > >
> > > > Thanks,
> > > >
> > > > Jun
> > > >
> > > > On Sun, Jan 20, 2013 at 11:02 PM, navneet sharma <
> > > > navneetsharma0...@gmail.com> wrote:
> > > >
> > > > > Is there any property to make consumer work for lets say only 10
> mins
> > > (ie
> > > > > some kind of timer)
> > > > > So, i want to close the consumer after 10 mins reading from
> broker..
> > > > >
> > > > > Thanks,
> > > > > Navneet Sharma
> > > > >
> > > > >
> > > > > On Mon, Jan 21, 2013 at 11:48 AM, Ryan LeCompte <
> lecom...@gmail.com>
> > > > > wrote:
> > > > >
> > > > > > Perfect. Thanks Jun!
> > > > > >
> > > > > > Ryan
> > > > > >
> > > > > >
> > > > > > On Sun, Jan 20, 2013 at 10:16 PM, Jun Rao <jun...@gmail.com>
> > wrote:
> > > > > >
> > > > > > > Yes, see consumer.timeout.ms in
> > > > > > http://kafka.apache.org/configuration.html
> > > > > > >
> > > > > > > Thanks,
> > > > > > >
> > > > > > > Jun
> > > > > > >
> > > > > > > On Sun, Jan 20, 2013 at 7:14 PM, Ryan LeCompte <
> > lecom...@gmail.com
> > > >
> > > > > > wrote:
> > > > > > >
> > > > > > > > Hello all,
> > > > > > > >
> > > > > > > > Does Kafka still only support blocking stream iterstors? It
> > would
> > > > be
> > > > > > > great
> > > > > > > > to pass a timeout or have a poll() operation for fetching
> > items.
> > > > > Right
> > > > > > > now
> > > > > > > > I'm always blocking in this call:
> > > > > > > > for (m <- stream) ...
> > > > > > > >
> > > > > > > > Thanks!
> > > > > > > >
> > > > > > > > Ryan
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> >
> >
> > --
> > --
> > *Evan Chan*
> > Senior Software Engineer |
> > e...@ooyala.com | (650) 996-4600
> > www.ooyala.com | blog <http://www.ooyala.com/blog> |
> > @ooyala<http://www.twitter.com/ooyala>
> >
>



-- 
--
*Evan Chan*
Senior Software Engineer |
e...@ooyala.com | (650) 996-4600
www.ooyala.com | blog <http://www.ooyala.com/blog> |
@ooyala<http://www.twitter.com/ooyala>

Reply via email to