...
Code Block | ||||
---|---|---|---|---|
| ||||
/** * A simple container class corresponding to a given {@link TaskId}. * Includes metadata such as whether it's stateful and the names of all state stores * belonging to this task, the set of input topic partitions and changelog topic partitions * for all logged state stores, and the rack ids of all replicas of each topic partition * in the task. */ public interface TaskInfo { TaskId id(); boolean isStateful(); Set<String> stateStoreNames(); Set<TaskTopicPartition> topicPartitions(); Set<TopicPartition> inputTopicPartitions(); Set<TopicPartition> changelogTopicPartitions(); Map<TopicPartition, Set<String>> partitionToRackIds(); } |
TaskTopicPartition
Another basic metadata container, this indicates whether the partition belongs to a source topic or a changelog topic (or in the case of a source-changelog topic, both) as well the rack ids of replicas hosting this partition, if available:
Code Block | ||||
---|---|---|---|---|
| ||||
package org.apache.kafka.streams.processor.assignment;
/**
* 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();
} |
TaskAssignmentUtils
We'll also move some of the existing assignment functionality into a utils class that can be called by implementors of the new TaskAssignor
. This will allow users to more easily adapt or modify pieces of the complex existing assignment algorithm, without having to re-implement the entire thing from scratch.
...