어드민(Admin) API
실제 운영환경에서는 카프카(kafka)에 설정된 내부 옵션을 설정하고 확인하는 것이 중요합니다.
카프카 클라이언트(Kafka Client)에서는 내부 옵션들을 설정하거나 조회하기 위해 AdminClient 클래스를 제공하는데 이를 활용하면 클러스터(Cluster) 옵션과 관련된 부분을 자동화할 수 있습니다.
- 카프카 컨슈머를 멀티 스레드로 생성하고, 구독하는 토픽의 파티션 개수만큼 스레드를 생성하고 싶을 때, 스레드 생성 전에 해당 토픽의 파티션 개수를 어드민 API를 통해 가져올 수 있습니다.
- AdminClient 클래스로 구현한 웹 대시보드를 통해 ACL(Access Control List)이 적용된 클러스터의 리소스 접근 권한 규칙을 추가할 수 있습니다.
- 특정 토픽의 데이터양이 늘어남을 감지하고 AdminClient 클래스로 해당 토픽의 파티션을 늘릴 수 있습니다.
어드민 API를 선언하는 방법은 아래와 같은데, 프로듀서(Producer)나 컨슈머(Consumer) API와 다르게 추가 설정 없이 클러스터 정보만 설정하면 됩니다.
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
AdminClient adminClient = AdminClient.create(properties);
어드민 API는 많은 부분이 버전이 올라가면서 자주 바뀌기 때문에 활용할 때 클러스터의 버전과 클라이언트의 버전을 맞춰서 사용해야 합니다.
주요 메서드 설명
AdminClient의 주요 메서드는 아래와 같습니다.
KafkaAdminClient 메서드 | 설명 |
describeCluster(DescribeClusterOptions options) | 브로커 정보 조회 |
listTopics(ListTopicsOptions options) | 토픽 리스트 조회 |
listConsumerGroups(ListConsumerGroupsOptions options) | 컨슈머 그룹 조회 |
createTopics(Collection‹NewTopic> newTopics, CreateTopicsOptions options) | 토픽 생성 |
createPartitions(Map<String, NewPartition> newPartitions, CreatePartitionsOptions options) | 파티션 개수 변경 |
createAcls(Collection acls, CreateAclsOptions options) | 접근 제어 규칙 생성 |
예제는 아래와 같습니다.
브로커 정보 조회
AdminClient를 통해 브로커의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.
for (Node node : adminClient.describeCluster().nodes().get()) {
log.info("node: {}", node);
ConfigResource configResource = new ConfigResource(ConfigResource.Type.BROKER, node.idString());
DescribeConfigsResult describeConfigsResult = adminClient.describeConfigs(Collections.singletonList(configResource));
describeConfigsResult.all().get()
.forEach((broker, config) -> config.entries()
.forEach(entry -> log.info("{} = {}", entry.name(), entry.value())));
}

토픽 정보 조회
AdminClient를 통해 토픽의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.
파티션의 개수, 파티션의 위치, 리더 파티션의 위치 등을 확인할 수 있습니다.
Map<String, TopicDescription> topics = adminClient.describeTopics(Collections.singletonList("topic1")).allTopicNames().get();
log.info("{}", topics);

어드민 API 종료
어드민 API를 사용하고 나서 close() 메서드를 사용해 종료하여 리소스가 낭비되지 않도록 해야 합니다.
adminClient.close();
'Apache Kafka' 카테고리의 다른 글
카프카 스트림즈(Streams) DSL의 기본 개념 (0) | 2025.02.07 |
---|---|
카프카 스트림즈(Kafka Streams)의 기본 개념 (0) | 2025.02.07 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2) (1) | 2025.01.30 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2) (0) | 2025.01.29 |
카프카 클라이언트(Kafka Client) - 프로듀서(Producer) API (0) | 2025.01.20 |
어드민(Admin) API
실제 운영환경에서는 카프카(kafka)에 설정된 내부 옵션을 설정하고 확인하는 것이 중요합니다.
카프카 클라이언트(Kafka Client)에서는 내부 옵션들을 설정하거나 조회하기 위해 AdminClient 클래스를 제공하는데 이를 활용하면 클러스터(Cluster) 옵션과 관련된 부분을 자동화할 수 있습니다.
- 카프카 컨슈머를 멀티 스레드로 생성하고, 구독하는 토픽의 파티션 개수만큼 스레드를 생성하고 싶을 때, 스레드 생성 전에 해당 토픽의 파티션 개수를 어드민 API를 통해 가져올 수 있습니다.
- AdminClient 클래스로 구현한 웹 대시보드를 통해 ACL(Access Control List)이 적용된 클러스터의 리소스 접근 권한 규칙을 추가할 수 있습니다.
- 특정 토픽의 데이터양이 늘어남을 감지하고 AdminClient 클래스로 해당 토픽의 파티션을 늘릴 수 있습니다.
어드민 API를 선언하는 방법은 아래와 같은데, 프로듀서(Producer)나 컨슈머(Consumer) API와 다르게 추가 설정 없이 클러스터 정보만 설정하면 됩니다.
Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
AdminClient adminClient = AdminClient.create(properties);
어드민 API는 많은 부분이 버전이 올라가면서 자주 바뀌기 때문에 활용할 때 클러스터의 버전과 클라이언트의 버전을 맞춰서 사용해야 합니다.
주요 메서드 설명
AdminClient의 주요 메서드는 아래와 같습니다.
KafkaAdminClient 메서드 | 설명 |
describeCluster(DescribeClusterOptions options) | 브로커 정보 조회 |
listTopics(ListTopicsOptions options) | 토픽 리스트 조회 |
listConsumerGroups(ListConsumerGroupsOptions options) | 컨슈머 그룹 조회 |
createTopics(Collection‹NewTopic> newTopics, CreateTopicsOptions options) | 토픽 생성 |
createPartitions(Map<String, NewPartition> newPartitions, CreatePartitionsOptions options) | 파티션 개수 변경 |
createAcls(Collection acls, CreateAclsOptions options) | 접근 제어 규칙 생성 |
예제는 아래와 같습니다.
브로커 정보 조회
AdminClient를 통해 브로커의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.
for (Node node : adminClient.describeCluster().nodes().get()) {
log.info("node: {}", node);
ConfigResource configResource = new ConfigResource(ConfigResource.Type.BROKER, node.idString());
DescribeConfigsResult describeConfigsResult = adminClient.describeConfigs(Collections.singletonList(configResource));
describeConfigsResult.all().get()
.forEach((broker, config) -> config.entries()
.forEach(entry -> log.info("{} = {}", entry.name(), entry.value())));
}

토픽 정보 조회
AdminClient를 통해 토픽의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.
파티션의 개수, 파티션의 위치, 리더 파티션의 위치 등을 확인할 수 있습니다.
Map<String, TopicDescription> topics = adminClient.describeTopics(Collections.singletonList("topic1")).allTopicNames().get();
log.info("{}", topics);

어드민 API 종료
어드민 API를 사용하고 나서 close() 메서드를 사용해 종료하여 리소스가 낭비되지 않도록 해야 합니다.
adminClient.close();
'Apache Kafka' 카테고리의 다른 글
카프카 스트림즈(Streams) DSL의 기본 개념 (0) | 2025.02.07 |
---|---|
카프카 스트림즈(Kafka Streams)의 기본 개념 (0) | 2025.02.07 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2) (1) | 2025.01.30 |
카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2) (0) | 2025.01.29 |
카프카 클라이언트(Kafka Client) - 프로듀서(Producer) API (0) | 2025.01.20 |