[java] 자바로 카프카 파티션 재배치하기

이번 블로그에서는 자바를 사용하여 카프카(Kafka)의 파티션(partition)을 재배치하는 방법에 대해 알아보겠습니다. 파티션 재배치는 카프카 클러스터에서 데이터를 균일하게 분산시키는 작업으로, 클러스터의 성능을 최적화하는 데에 중요합니다.

1. 카프카 파티션의 재배치가 필요한 이유

카프카의 파티션은 여러 개의 브로커에 분산되어 저장되는데, 이때 어떤 파티션은 한 브로커에만 집중되어 있을 수도 있습니다. 이렇게 파티션이 불균형하게 분산되어 있을 경우, 해당 파티션에 대한 처리량이 너무 많아질 수 있고, 일부 브로커는 처리량이 낮아지는 문제가 발생할 수 있습니다.

파티션 재배치를 통해 파티션 분산을 조정하면 모든 브로커에 대해 균등한 처리량과 부하 분배를 실현할 수 있으며, 전체 클러스터의 성능을 향상시킬 수 있습니다.

2. 자바를 통한 파티션 재배치 예제

import java.util.Properties;
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewPartitions;
import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.clients.admin.TopicPartitionInfo;

public class PartitionReassignmentExample {

    public static void main(String[] args) throws Exception {
    
        // Kafka AdminClient 설정
        Properties props = new Properties();
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        AdminClient adminClient = AdminClient.create(props);

        // 파티션 정보 조회
        String topicName = "my_topic";
        TopicDescription topicDescription = adminClient.describeTopics(Collections.singleton(topicName))
                .values()
                .get(topicName)
                .get(10, TimeUnit.SECONDS);
        List<TopicPartitionInfo> partitions = topicDescription.partitions();

        // 파티션 재배치
        List<NewPartitions> newPartitions = new ArrayList<>();
        int numPartitions = partitions.size() + 1; // 재배치 후 파티션 개수
        newPartitions.add(NewPartitions.increaseTo(numPartitions));
        adminClient.createPartitions(Collections.singletonMap(topicName, newPartitions)).all().get();
        adminClient.close();
    }
}

위의 예제에서는 AdminClient를 사용하여 주어진 토픽의 현재 파티션 개수를 확인하고, 파티션 재배치를 위해 파티션 개수를 증가시키는 작업을 수행합니다. BOOTSTRAP_SERVERS_CONFIG에는 카프카 클러스터의 부트스트랩 서버 주소를 설정해주어야 합니다.

3. 실행 결과 확인

예제 코드를 실행하면, 카프카 클러스터의 주어진 토픽에 대해 파티션 재배치 작업이 수행됩니다. 파티션 재배치 작업이 완료되면 모든 브로커에 대해 파티션이 고르게 분산되어 있음을 확인할 수 있습니다.

4. 참고 자료