InternalConsumerGroup.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.provectus.kafka.ui.model;
  2. import java.util.Collection;
  3. import java.util.Map;
  4. import java.util.Optional;
  5. import java.util.Set;
  6. import java.util.stream.Collectors;
  7. import lombok.Builder;
  8. import lombok.Data;
  9. import org.apache.kafka.clients.admin.ConsumerGroupDescription;
  10. import org.apache.kafka.common.ConsumerGroupState;
  11. import org.apache.kafka.common.Node;
  12. import org.apache.kafka.common.TopicPartition;
  13. @Data
  14. @Builder(toBuilder = true)
  15. public class InternalConsumerGroup {
  16. private final String groupId;
  17. private final boolean simple;
  18. private final Collection<InternalMember> members;
  19. private final Map<TopicPartition, Long> offsets;
  20. private final Map<TopicPartition, Long> endOffsets;
  21. private final String partitionAssignor;
  22. private final ConsumerGroupState state;
  23. private final Node coordinator;
  24. @Data
  25. @Builder(toBuilder = true)
  26. public static class InternalMember {
  27. private final String consumerId;
  28. private final String groupInstanceId;
  29. private final String clientId;
  30. private final String host;
  31. private final Set<TopicPartition> assignment;
  32. }
  33. public static InternalConsumerGroup create(
  34. ConsumerGroupDescription description,
  35. Map<TopicPartition, Long> groupOffsets,
  36. Map<TopicPartition, Long> topicEndOffsets) {
  37. var builder = InternalConsumerGroup.builder();
  38. builder.groupId(description.groupId());
  39. builder.simple(description.isSimpleConsumerGroup());
  40. builder.state(description.state());
  41. builder.partitionAssignor(description.partitionAssignor());
  42. builder.members(
  43. description.members().stream()
  44. .map(m ->
  45. InternalConsumerGroup.InternalMember.builder()
  46. .assignment(m.assignment().topicPartitions())
  47. .clientId(m.clientId())
  48. .groupInstanceId(m.groupInstanceId().orElse(""))
  49. .consumerId(m.consumerId())
  50. .clientId(m.clientId())
  51. .host(m.host())
  52. .build()
  53. ).collect(Collectors.toList())
  54. );
  55. builder.offsets(groupOffsets);
  56. builder.endOffsets(topicEndOffsets);
  57. Optional.ofNullable(description.coordinator()).ifPresent(builder::coordinator);
  58. return builder.build();
  59. }
  60. }