[java] 자바에서 아파치 카프카 사용하기

카프카(Kafka)는 대용량의 실시간 데이터 스트리밍을 처리하기 위한 분산 메시지 큐 시스템입니다. 이 글은 자바에서 아파치 카프카를 사용하는 방법을 안내합니다.

1. 아파치 카프카 설치 및 설정

아파치 카프카를 사용하기 위해서는 공식 웹사이트에서 카프카를 다운로드하고 설치해야 합니다. 설치 후에는 아파치 카프카를 실행하기 위한 설정 파일을 수정해야 합니다.

2. 카프카 클라이언트 의존성 추가

자바에서 카프카를 사용하기 위해서는 먼저 필요한 클라이언트 의존성을 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음과 같이 의존성을 추가할 수 있습니다.

<dependencies>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.8.0</version>
    </dependency>
</dependencies>

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 의존성을 추가할 수 있습니다.

dependencies {
    implementation 'org.apache.kafka:kafka-clients:2.8.0'
}

3. 카프카 프로듀서 작성

카프카 프로듀서는 카프카로 데이터를 보내는 역할을 합니다. 아래는 카프카 프로듀서를 작성하는 예제 코드입니다.

import org.apache.kafka.clients.producer.*;

import java.util.Properties;

public class KafkaProducerExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer<>(props);

        String topic = "my_topic";
        String key = "my_key";
        String value = "Hello, Kafka!";

        ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value);
        producer.send(record);

        producer.close();
    }
}

4. 카프카 컨슈머 작성

카프카 컨슈머는 카프카로부터 데이터를 받아오는 역할을 합니다. 아래는 카프카 컨슈머를 작성하는 예제 코드입니다.

import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.serialization.StringDeserializer;

import java.time.Duration;
import java.util.Collections;
import java.util.Properties;

public class KafkaConsumerExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", "my_consumer_group");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        Consumer<String, String> consumer = new KafkaConsumer<>(props);

        String topic = "my_topic";
        consumer.subscribe(Collections.singleton(topic));

        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
            
            for (ConsumerRecord<String, String> record : records) {
                System.out.println(record.value());
            }
        }
    }
}

결론

이와 같이 자바에서 아파치 카프카를 사용하는 방법에 대해 알아보았습니다. 카프카는 대규모 실시간 데이터 스트리밍을 처리하는데 매우 효과적인 도구입니다. 만약 데이터 스트리밍 처리가 필요한 경우, 카프카를 고려해보세요.

참고 자료