반응형
어드민(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' 카테고리의 다른 글
카프카 스트림즈(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 |