mirror of https://github.com/apache/kafka.git
KAFKA-15045: (KIP-924 pt. 8) Added TopicPartitionAssignmentInfo (#16024)
For task assignment purposes, the user needs to have a set of information available for each topic partition affecting the desired tasks. This PR introduces a new interface for a read-only container class that allows all the important and relevant information to be found in one place. Reviewers: Anna Sophie Blee-Goldman <ableegoldman@apache.org>
This commit is contained in:
parent
27a6c156c4
commit
06739d5aa0
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.kafka.streams.processor.assignment;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import org.apache.kafka.common.TopicPartition;
|
||||
|
||||
/**
|
||||
* This is a simple container class used during the assignment process to distinguish
|
||||
* TopicPartitions type. Since the assignment logic can depend on the type of topic we're
|
||||
* looking at, and the rack information of the partition, this container class should have
|
||||
* everything necessary to make informed task assignment decisions.
|
||||
*/
|
||||
public interface TaskTopicPartition {
|
||||
/**
|
||||
*
|
||||
* @return the {@code TopicPartition} for this task.
|
||||
*/
|
||||
TopicPartition topicPartition();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return whether the underlying topic is a source topic or not. Source changelog topics
|
||||
* are both source topics and changelog topics.
|
||||
*/
|
||||
boolean isSource();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return whether the underlying topic is a changelog topic or not. Source changelog topics
|
||||
* are both source topics and changelog topics.
|
||||
*/
|
||||
boolean isChangelog();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the broker rack ids on which this topic partition resides. If no information could
|
||||
* be found, this will return an empty optional value.
|
||||
*/
|
||||
Optional<Set<String>> rackIds();
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.kafka.streams.processor.internals.assignment;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import org.apache.kafka.common.TopicPartition;
|
||||
import org.apache.kafka.streams.processor.assignment.TaskTopicPartition;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* This is a simple container class used during the assignment process to distinguish
|
||||
* TopicPartitions type. Since the assignment logic can depend on the type of topic we're
|
||||
* looking at, and the rack information of the partition, this container class should have
|
||||
* everything necessary to make informed task assignment decisions.
|
||||
*/
|
||||
public class DefaultTaskTopicPartition implements TaskTopicPartition {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DefaultTaskTopicPartition.class);
|
||||
|
||||
private final TopicPartition topicPartition;
|
||||
private final boolean isSourceTopic;
|
||||
private final boolean isChangelogTopic;
|
||||
private final Optional<Set<String>> rackIds;
|
||||
|
||||
public DefaultTaskTopicPartition(final TopicPartition topicPartition,
|
||||
final boolean isSourceTopic,
|
||||
final boolean isChangelogTopic,
|
||||
final Set<String> rackIds) {
|
||||
this.topicPartition = topicPartition;
|
||||
this.isSourceTopic = isSourceTopic;
|
||||
this.isChangelogTopic = isChangelogTopic;
|
||||
this.rackIds = Optional.ofNullable(rackIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TopicPartition topicPartition() {
|
||||
return topicPartition;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSource() {
|
||||
return isSourceTopic;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isChangelog() {
|
||||
return isChangelogTopic;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Set<String>> rackIds() {
|
||||
return rackIds;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue