sanghyeok An created KAFKA-21188:
------------------------------------

             Summary: Merging topics with different partition counts leaves 
some records unprocessed under the Streams Rebalance Protocol
                 Key: KAFKA-21188
                 URL: https://issues.apache.org/jira/browse/KAFKA-21188
             Project: Kafka
          Issue Type: Bug
            Reporter: sanghyeok An
            Assignee: sanghyeok An


With {*}group.protocol=streams{*}, merging two topics with different partition 
counts includes nonexistent partitions in the tasks’ inputs, leaving some 
records unprocessed.

*Steps to Reproduce*

1. Create topic A with 1 partition({*}0{*}) and topic B with 3 partitions({*}0, 
1, 2{*}).
2. Run the following topology with {*}group.protocol=streams{*}:
{code:java}
KStream<String, String> streamA = builder.stream("A");
KStream<String, String> streamB = builder.stream("B");

streamA.merge(streamB).to("output");
{code}
3. Produce records to {*}A-0{*}, {*}B-0{*}, {*}B-1{*}, and {*}B-2{*}.
 * *Expected:* All input records appear in `output`.
 * *Actual:* Records from `B-1` and `B-2` do not appear in `output`, and the 
following messages repeatedly reference nonexistent partitions:

{code:java}
Requesting the log end offset for A-1 in order to compute lag
Requesting the log end offset for A-2 in order to compute lag
{code}
 

*Cause*

StreamsMembershipManager#topicPartitionsForActiveTasks and 
DefaultStreamsRebalanceListener#toTopicPartitions apply the task’s partition ID 
to every input topic without checking each topic’s partition count.

As a result, a task that should include only *B-1* also includes {*}A-1{*}. The 
same issue occurs for partition ID 2.

The classic protocol’s PartitionGrouper checks each topic’s partition count and 
includes only existing partitions. The new protocol’s conversion paths need 
equivalent handling.



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

Reply via email to