@Override public List<ProtocolMetadata> metadata() { this.joinedSubscription = subscriptions.subscription(); List<ProtocolMetadata> metadataList = new ArrayList<>(); for (PartitionAssignor assignor : assignors) { Subscription subscription = assignor.subscription(joinedSubscription); ByteBuffer metadata = ConsumerProtocol.serializeSubscription(subscription); metadataList.add(new ProtocolMetadata(assignor.name(), metadata)); } return metadataList; }
private PartitionAssignor lookupAssignor(String name) { for (PartitionAssignor assignor : this.assignors) { if (assignor.name().equals(name)) return assignor; } return null; }
protected static List<List<LogPartition>> assignments(PartitionAssignor assignor, int threads, Map<String, Integer> streams) { final List<PartitionInfo> parts = new ArrayList<>(); streams.forEach((streamName, size) -> parts.addAll(getPartsFor(streamName, size))); Map<String, PartitionAssignor.Subscription> subscriptions = new HashMap<>(); List<String> streamNames = streams.keySet().stream().sorted().collect(Collectors.toList()); for (int i = 0; i < threads; i++) { subscriptions.put(String.valueOf(i), new PartitionAssignor.Subscription(streamNames)); } Cluster cluster = new Cluster("kafka-cluster", Collections.emptyList(), parts, Collections.emptySet(), Collections.emptySet()); Map<String, PartitionAssignor.Assignment> assignments = assignor.assign(cluster, subscriptions); List<List<LogPartition>> ret = new ArrayList<>(threads); for (int i = 0; i < threads; i++) { ret.add(assignments.get(String.valueOf(i)) .partitions() .stream() .map(part -> new LogPartition(part.topic(), part.partition())) .collect(Collectors.toList())); } return ret; }
assignor.onAssignment(assignment);
private JoinGroupResponse joinGroupFollowerResponse(PartitionAssignor assignor, int generationId, String memberId, String leaderId, Errors error) { return new JoinGroupResponse(error, generationId, assignor.name(), memberId, leaderId, Collections.emptyMap()); }
final JoinGroupResponse leaderResponse = new JoinGroupResponse(Errors.NONE, 1, assignor.name(), "memberId", "memberId", Collections.singletonMap("memberId", byteBuffer)); client.prepareResponseFrom(leaderResponse, coordinator);