[ 
https://issues.apache.org/jira/browse/STORM-4016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rui Abreu resolved STORM-4016.
------------------------------
    Resolution: Fixed

> Kafka spout: start using poll(Duration)
> ---------------------------------------
>
>                 Key: STORM-4016
>                 URL: https://issues.apache.org/jira/browse/STORM-4016
>             Project: Apache Storm
>          Issue Type: Improvement
>          Components: storm-kafka
>    Affects Versions: 2.6.0
>            Reporter: Rui Abreu
>            Assignee: Rui Abreu
>            Priority: Minor
>             Fix For: 2.7.0
>
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> Kafka has deprecated poll(long) in favour of poll(Duration): [KIP-266: Fix 
> consumer indefinite blocking 
> behavior|https://cwiki.apache.org/confluence/display/KAFKA/KIP-266%3A+Fix+consumer+indefinite+blocking+behavior]
> There is also an interesting report about the behaviour of it poll:
> _The pre-existing variant {{poll(long timeout)}} would block indefinitely for 
> metadata updates if they were needed, then it would issue a fetch and poll 
> for {{timeout}} ms for new records. The initial indefinite metadata block 
> caused applications to become stuck when the brokers became unavailable. The 
> existence of the timeout parameter made the indefinite block especially 
> unintuitive._
> _We will add a new method {{poll(Duration timeout)}} with the semantics:_
>  # _iff a metadata update is needed:_
>  ## _send (asynchronous) metadata requests_
>  ## _poll for metadata responses (counts against timeout)_
>  *** _if no response within timeout, return an empty collection immediately_
>  # _if there is fetch data available, return it immediately_
>  # _if there is no fetch request in flight, send fetch requests_
>  # _poll for fetch responses (counts against timeout)_
>  ** _if no response within timeout, return an empty collection (leaving async 
> fetch request for the next poll)_
>  ** _if we get a response, return the response_
> _We will deprecate the original method, {{{}poll(long timeout){}}}, and we 
> will not change its semantics, so it remains:_
>  # _iff a metadata update is needed:_
>  ## _send (asynchronous) metadata requests_
>  ## _poll for metadata responses indefinitely until we get it_
>  # _if there is fetch data available, return it immediately_
>  # _if there is no fetch request in flight, send fetch requests_
>  # _poll for fetch responses (counts against timeout)_
>  ** _if no response within timeout, return an empty collection (leaving async 
> fetch request for the next poll)_
>  ** _if we get a response, return the response_
> _One notable usage is prohibited by the new {{{}poll{}}}: previously, you 
> could call {{poll(0)}} to block for metadata updates, for example to 
> initialize the client, supposedly without fetching records. Note, though, 
> that this behavior is not according to any contract, and there is no 
> guarantee that {{poll(0)}} won't return records the first time it's called. 
> Therefore, it has always been unsafe to ignore the response._
>  
>  
> [https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=75974886|http://example.com]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to