[java] 카프카에서 자바로 데이터 압축하기

카프카(Kafka)는 대용량의 실시간 스트리밍 데이터를 처리하기 위한 분산 메시징 시스템입니다. 데이터의 안정적인 전송과 처리를 위해 카프카에서는 압축 기능을 제공합니다. 압축을 사용하면 데이터의 용량을 줄이고 네트워크 대역폭을 절약할 수 있습니다.

Java에서는 카프카의 압축 기능을 활용하여 데이터를 압축할 수 있습니다. 이를 위해 카프카 클라이언트 라이브러리를 사용할 수 있습니다.

카프카 클라이언트 라이브러리 의존성 추가

먼저 Maven 프로젝트의 pom.xml 파일에 카프카 클라이언트 라이브러리의 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>{카프카 버전}</version>
</dependency>

의존성을 추가한 후 Maven 프로젝트를 업데이트하면 카프카 클라이언트 라이브러리가 설치됩니다.

카프카 데이터 압축 설정

카프카에서 데이터 압축을 사용하려면 카프카 브로커(Broker)의 설정 파일인 server.properties 파일을 수정해야 합니다. server.properties 파일에서 다음과 같은 설정을 추가하면 됩니다.

compression.type=gzip

위 설정은 Gzip 알고리즘을 사용하여 데이터를 압축한다는 의미입니다. 카프카에서는 다른 알고리즘인 “snappy”나 “lz4”도 지원합니다.

자바 코드로 데이터 압축하기

자바에서 카프카 데이터를 압축하기 위해서는 ProducerConfig 클래스와 ProducerRecord 클래스를 사용해야 합니다.

import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

public class KafkaDataProducer {
    public static void main(String[] args) {
        // 카프카 브로커 서버 주소
        String bootstrapServers = "localhost:9092";

        // 카프카 프로듀서 설정
        Properties properties = new Properties();
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.COMPRESSION_TYPE_CONFIG, "gzip");

        // 카프카 프로듀서 생성
        Producer<String, String> producer = new KafkaProducer<>(properties);

        // 카프카 토픽과 메시지 생성
        String topic = "my-topic";
        String message = "Hello, Kafka!";

        // 메시지를 압축하여 카프카에 보냄
        ProducerRecord<String, String> record = new ProducerRecord<>(topic, message);
        producer.send(record);

        // 카프카 프로듀서 종료
        producer.close();
    }
}

위 코드에서 ProducerConfig.COMPRESSION_TYPE_CONFIG 속성을 “gzip”로 설정하면 데이터가 Gzip 알고리즘을 사용하여 압축됩니다.

마무리

카프카에서 자바로 데이터를 압축하는 방법에 대해 알아보았습니다. 카프카의 압축 기능을 활용하여 대량의 데이터를 효율적으로 전송하고 처리할 수 있습니다. 또한, 다른 알고리즘을 사용하고 싶다면 server.properties 파일에서 compression.type 속성을 변경하여 압축 알고리즘을 선택할 수 있습니다.

더 자세한 내용은 카프카 공식 문서를 참고하시기 바랍니다.