diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/StreamsGroupHeartbeatRequestManager.java b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/StreamsGroupHeartbeatRequestManager.java index bd554051f30b4..0f2f327826626 100644 --- a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/StreamsGroupHeartbeatRequestManager.java +++ b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/StreamsGroupHeartbeatRequestManager.java @@ -834,8 +834,21 @@ private static Map activeTopicPartitions = getTopicPartitionList(endpoint.activePartitions()); List standbyTopicPartitions = getTopicPartitionList(endpoint.standbyPartitions()); StreamsGroupHeartbeatResponseData.Endpoint userEndpoint = endpoint.userEndpoint(); - StreamsRebalanceData.EndpointPartitions endpointPartitions = new StreamsRebalanceData.EndpointPartitions(activeTopicPartitions, standbyTopicPartitions); - partitionsByHost.put(new StreamsRebalanceData.HostInfo(userEndpoint.host(), userEndpoint.port()), endpointPartitions); + StreamsRebalanceData.HostInfo hostInfo = new StreamsRebalanceData.HostInfo(userEndpoint.host(), userEndpoint.port()); + + partitionsByHost.merge( + hostInfo, + new StreamsRebalanceData.EndpointPartitions(activeTopicPartitions, standbyTopicPartitions), + (existing, newPartitions) -> { + List mergedActive = existing.activePartitions(); + mergedActive.addAll(newPartitions.activePartitions()); + + List mergedStandby = existing.standbyPartitions(); + mergedStandby.addAll(newPartitions.standbyPartitions()); + + return new StreamsRebalanceData.EndpointPartitions(mergedActive, mergedStandby); + } + ); }); return partitionsByHost; } diff --git a/streams/integration-tests/src/test/java/org/apache/kafka/streams/integration/IQv2EndpointToPartitionsIntegrationTest.java b/streams/integration-tests/src/test/java/org/apache/kafka/streams/integration/IQv2EndpointToPartitionsIntegrationTest.java index 5b3b789ab10de..fb9304053dd61 100644 --- a/streams/integration-tests/src/test/java/org/apache/kafka/streams/integration/IQv2EndpointToPartitionsIntegrationTest.java +++ b/streams/integration-tests/src/test/java/org/apache/kafka/streams/integration/IQv2EndpointToPartitionsIntegrationTest.java @@ -110,6 +110,7 @@ public void shouldGetCorrectHostPartitionInformation(final String groupProtocolC streamOneProperties.put(StreamsConfig.STATE_DIR_CONFIG, TestUtils.tempDirectory(appId).getPath() + "-ks1"); streamOneProperties.put(StreamsConfig.CLIENT_ID_CONFIG, appId + "-ks1"); streamOneProperties.put(StreamsConfig.APPLICATION_SERVER_CONFIG, "localhost:2020"); + streamOneProperties.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, 3); streamOneProperties.put(StreamsConfig.GROUP_PROTOCOL_CONFIG, groupProtocolConfig); if (usingStandbyReplicas) { streamOneProperties.put(StreamsConfig.NUM_STANDBY_REPLICAS_CONFIG, numStandbyReplicas);