[ 
https://issues.apache.org/jira/browse/KAFKA-3854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15355981#comment-15355981
 ] 

ASF GitHub Bot commented on KAFKA-3854:
---------------------------------------

GitHub user vahidhashemian opened a pull request:

    https://github.com/apache/kafka/pull/1572

    KAFKA-3854: Fix issues with new consumer's subsequent regex (pattern) 
subscriptions

    This patch fixes two issues:
    1. Subsequent regex subscriptions fail with the new consumer.
    2. Subsequent regex subscriptions would not actually change the 
subscription of the new consumer nor they would trigger a rebalance.
    
    The final note on the JIRA stating that a later created topic that matches 
a consumer's subscription pattern would not be assigned to the consumer upon 
creation seems to be as designed. A repeat 
    `subscribe()` to the same pattern would be needed to handle that case.
    
    Improved unit tests for regex subscriptions will be covered in KAFKA-3897.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/vahidhashemian/kafka KAFKA-3854

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/kafka/pull/1572.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1572
    
----
commit e9d10171b0ebbd13ac15d5f0059246ffbe249b37
Author: Vahid Hashemian <vahidhashem...@us.ibm.com>
Date:   2016-06-16T21:19:32Z

    KAFKA-3854: Fix issues with new consumer's subsequent regex (pattern) 
subscriptions
    
    This patch fixes two issues:
    1. Subsequent regex subscriptions fail with the new consumer.
    2. Subsequent regex subscriptions would not actually change the 
subscription of the new consumer nor they would trigger a rebalance.
    
    The final note on the JIRA stating that a later created topic that matches 
a consumer's subscription pattern would not be assigned to the consumer upon 
creation seems to be as designed. A repeat subscribe() to the same pattern 
would be needed to handle that case.
    Unit tests for regex subscriptions will be handled in KAFKA-3897.

----


> Subsequent regex subscription calls fail
> ----------------------------------------
>
>                 Key: KAFKA-3854
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3854
>             Project: Kafka
>          Issue Type: Bug
>          Components: consumer
>            Reporter: Vahid Hashemian
>            Assignee: Vahid Hashemian
>
> There are a couple of issues with regex subscription in the new consumer:
> h6. Subsequent Subscriptions Fail
> When consecutive calls are made to new consumer's [regex 
> subscription|https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L850],
>  like below: 
> {code}
> consumer.subscribe(Pattern.compile("..."), listener);
> consumer.poll(0);
> consumer.subscribe(Pattern.compile("f.."), listener);
> consumer.poll(0);
> {code}
> the second call fails with the following error:
> {code}
> Exception in thread "main" java.lang.IllegalStateException: Subscription to 
> topics, partitions and pattern are mutually exclusive
>       at 
> org.apache.kafka.clients.consumer.internals.SubscriptionState.subscribe(SubscriptionState.java:175)
>       at 
> org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(KafkaConsumer.java:854)
>       ...
> {code}
> h6. Subsequent Subscriptions Fail to Trigger a Subscription Change and 
> Rebalance
> Even after the code is tweaked to get around the above issue, only the first 
> call to regex subscription triggers an actual subscription and the 
> subscription's rebalance listener. The reason is the regex {{subscription}} / 
> {{poll}} does not directly call {{changeSubscription(...)}} in which 
> {{needsPartitionAssignment}} is set and causes a rebalance. This method is 
> called only during the first regex {{subscription}} / {{poll}} when 
> coordinator is unknown and [a {{client.poll}} 
> call|https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/internals/AbstractCoordinator.java#L179]
>  is made which eventually leads to [a {{changeSubscription}} 
> call|https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java#L161].
>  The subsequent call does not reach this point because the coordinator is 
> already known.
> It seems due to the same reason, if a consumer is subscribed to a pattern, 
> and later on a new topic is created that matches that pattern, the consumer 
> does not become subscribed it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to