Esko Suomi created KAFKA-520:
--------------------------------

             Summary: ConsumerIterator implemented by KafkaStream doesn't 
follow Java practices
                 Key: KAFKA-520
                 URL: https://issues.apache.org/jira/browse/KAFKA-520
             Project: Kafka
          Issue Type: Bug
    Affects Versions: 0.7.1, 0.7
            Reporter: Esko Suomi


As a foreword, this only applies to Java conventions - if things are different 
on the Scala side, then so be it and that's fine.

As mentioned in the summary, ConsumerIterator doesn't follow proper Java 
practices, to be exact it doesn't follow them in its functionality. The biggest 
offender is the #hasNext() method which blocks until ConsumerTimeoutException 
is thrown. While it is obvious that this is because the targeted use-case is 
infinite consuming of a given topic, it did confuse me as an API integration 
programmer since the documentation was severely lacking and I only started to 
observe this problem in our staging environment.

There are multiple ways that I find appropriate to fix this:
- Instead of implementing java.util.Iterator, make the class an implementation 
of BlockingQueue. Since BlockingQueue is in the java.util.concurrent package, 
it should nudge the user's mind to correct tracks about the class' semantics 
immediately.
- Get rid of the concept of internal infinite iteration and instead make the 
Iterator represent one fetched block of data; that way the infinite loop for 
consuming can be something like
while (!Thread.interrupted) {
    Iterator it = ks.readMore(...);
    while (iterator.hasNext()) {
        /* consume messages */
    }
}
In addition to clearer Java API, this also gets rid of the exception being used 
for flow control which, once again, doesn't fit to Java best practices.
- Update the documentation (both API and quickstart) to explain how to recover 
from such failure.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to