Search in sources :

Example 6 with Task

use of org.apache.kafka.streams.processor.internals.Task in project kafka by apache.

the class ClientState method initializePrevActiveTasksFromOwnedPartitions.

private void initializePrevActiveTasksFromOwnedPartitions(final Map<TopicPartition, TaskId> taskForPartitionMap) {
    // 3) stateless tasks are not encoded in the task lags, and must be figured out from the ownedPartitions
    for (final Map.Entry<TopicPartition, String> partitionEntry : ownedPartitions.entrySet()) {
        final TopicPartition tp = partitionEntry.getKey();
        final TaskId task = taskForPartitionMap.get(tp);
        if (task != null) {
            addPreviousActiveTask(task);
            previousActiveTasks.consumerToTaskIds().computeIfAbsent(partitionEntry.getValue(), k -> new HashSet<>()).add(task);
        } else {
            LOG.error("No task found for topic partition {}", tp);
        }
    }
}
Also used : TopicPartition(org.apache.kafka.common.TopicPartition) Collections.emptyMap(java.util.Collections.emptyMap) Logger(org.slf4j.Logger) TaskId(org.apache.kafka.streams.processor.TaskId) SortedSet(java.util.SortedSet) Collection(java.util.Collection) LoggerFactory(org.slf4j.LoggerFactory) Set(java.util.Set) UUID(java.util.UUID) Collectors(java.util.stream.Collectors) TreeSet(java.util.TreeSet) Task(org.apache.kafka.streams.processor.internals.Task) Utils.union(org.apache.kafka.common.utils.Utils.union) HashSet(java.util.HashSet) UNKNOWN_OFFSET_SUM(org.apache.kafka.streams.processor.internals.assignment.SubscriptionInfo.UNKNOWN_OFFSET_SUM) Collections.unmodifiableSet(java.util.Collections.unmodifiableSet) Comparator.comparingLong(java.util.Comparator.comparingLong) TreeMap(java.util.TreeMap) Map(java.util.Map) Collections.unmodifiableMap(java.util.Collections.unmodifiableMap) Comparator.comparing(java.util.Comparator.comparing) Comparator(java.util.Comparator) TaskId(org.apache.kafka.streams.processor.TaskId) TopicPartition(org.apache.kafka.common.TopicPartition) Collections.emptyMap(java.util.Collections.emptyMap) TreeMap(java.util.TreeMap) Map(java.util.Map) Collections.unmodifiableMap(java.util.Collections.unmodifiableMap) HashSet(java.util.HashSet)

Example 7 with Task

use of org.apache.kafka.streams.processor.internals.Task in project kafka by apache.

the class AssignmentTestUtils method analyzeTaskAssignmentBalance.

static TaskSkewReport analyzeTaskAssignmentBalance(final Map<UUID, ClientState> clientStates) {
    final Function<Integer, Map<UUID, AtomicInteger>> initialClientCounts = i -> clientStates.keySet().stream().collect(Collectors.toMap(c -> c, c -> new AtomicInteger(0)));
    final Map<Integer, Map<UUID, AtomicInteger>> subtopologyToClientsWithPartition = new TreeMap<>();
    for (final Map.Entry<UUID, ClientState> entry : clientStates.entrySet()) {
        final UUID client = entry.getKey();
        final ClientState clientState = entry.getValue();
        for (final TaskId task : clientState.activeTasks()) {
            final int subtopology = task.subtopology();
            subtopologyToClientsWithPartition.computeIfAbsent(subtopology, initialClientCounts).get(client).incrementAndGet();
        }
    }
    int maxTaskSkew = 0;
    final Set<Integer> skewedSubtopologies = new TreeSet<>();
    for (final Map.Entry<Integer, Map<UUID, AtomicInteger>> entry : subtopologyToClientsWithPartition.entrySet()) {
        final Map<UUID, AtomicInteger> clientsWithPartition = entry.getValue();
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        for (final AtomicInteger count : clientsWithPartition.values()) {
            max = Math.max(max, count.get());
            min = Math.min(min, count.get());
        }
        final int taskSkew = max - min;
        maxTaskSkew = Math.max(maxTaskSkew, taskSkew);
        if (taskSkew > 1) {
            skewedSubtopologies.add(entry.getKey());
        }
    }
    return new TaskSkewReport(maxTaskSkew, skewedSubtopologies, subtopologyToClientsWithPartition);
}
Also used : TaskId(org.apache.kafka.streams.processor.TaskId) HashMap(java.util.HashMap) Function(java.util.function.Function) Utils.entriesToMap(org.apache.kafka.common.utils.Utils.entriesToMap) TreeSet(java.util.TreeSet) AdminClient(org.apache.kafka.clients.admin.AdminClient) HashSet(java.util.HashSet) ListOffsetsResult(org.apache.kafka.clients.admin.ListOffsetsResult) BaseMatcher(org.hamcrest.BaseMatcher) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) Assert.fail(org.junit.Assert.fail) KafkaFutureImpl(org.apache.kafka.common.internals.KafkaFutureImpl) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) EasyMock.anyObject(org.easymock.EasyMock.anyObject) TopicPartition(org.apache.kafka.common.TopicPartition) Description(org.hamcrest.Description) Collections.emptyMap(java.util.Collections.emptyMap) Collections.emptySet(java.util.Collections.emptySet) LATEST_SUPPORTED_VERSION(org.apache.kafka.streams.processor.internals.assignment.StreamsAssignmentProtocolVersions.LATEST_SUPPORTED_VERSION) Collection(java.util.Collection) Set(java.util.Set) EasyMock(org.easymock.EasyMock) UUID(java.util.UUID) EasyMock.expect(org.easymock.EasyMock.expect) Collectors(java.util.stream.Collectors) Task(org.apache.kafka.streams.processor.internals.Task) Objects(java.util.Objects) ListOffsetsResultInfo(org.apache.kafka.clients.admin.ListOffsetsResult.ListOffsetsResultInfo) TreeMap(java.util.TreeMap) Utils.intersection(org.apache.kafka.common.utils.Utils.intersection) Matcher(org.hamcrest.Matcher) Entry(java.util.Map.Entry) Matchers.is(org.hamcrest.Matchers.is) Subtopology(org.apache.kafka.streams.processor.internals.TopologyMetadata.Subtopology) TaskId(org.apache.kafka.streams.processor.TaskId) TreeMap(java.util.TreeMap) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TreeSet(java.util.TreeSet) UUID(java.util.UUID) HashMap(java.util.HashMap) Utils.entriesToMap(org.apache.kafka.common.utils.Utils.entriesToMap) Map(java.util.Map) Collections.emptyMap(java.util.Collections.emptyMap) TreeMap(java.util.TreeMap)

Aggregations

Task (org.apache.kafka.streams.processor.internals.Task)7 TaskId (org.apache.kafka.streams.processor.TaskId)6 Map (java.util.Map)5 Set (java.util.Set)5 UUID (java.util.UUID)5 Collectors (java.util.stream.Collectors)5 HashMap (java.util.HashMap)4 HashSet (java.util.HashSet)4 TreeMap (java.util.TreeMap)4 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)4 Logger (org.slf4j.Logger)4 ArrayList (java.util.ArrayList)3 Collection (java.util.Collection)3 TreeSet (java.util.TreeSet)3 TopicPartition (org.apache.kafka.common.TopicPartition)3 StateStore (org.apache.kafka.streams.processor.StateStore)3 StreamThread (org.apache.kafka.streams.processor.internals.StreamThread)3 LoggerFactory (org.slf4j.LoggerFactory)3 Collections (java.util.Collections)2 Collections.emptyMap (java.util.Collections.emptyMap)2