[java] 카프카와 자바를 사용한 분산 시스템 구축하기

분산 시스템은 대용량 데이터 처리, 확장성, 신뢰성 등 다양한 이점을 제공합니다. 이를 위해 카프카와 자바를 사용하여 신뢰성 있는 분산 시스템을 구축하는 방법을 알아보겠습니다.

카프카 소개

카프카는 아파치 소프트웨어 재단에서 개발된 분산 스트리밍 플랫폼입니다. 대량의 데이터를 효율적으로 처리하고 여러 애플리케이션 간에 실시간으로 데이터를 전달하는 데 사용됩니다.

카프카와 자바 연동

카프카와 자바를 연동하기 위해서는 카프카 클라이언트 라이브러리를 사용해야 합니다. 이 라이브러리는 Maven 등의 의존성 관리 도구를 통해 프로젝트에 추가할 수 있습니다.

  1. 의존성 추가

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.8.0</version>
    </dependency>
    
  2. KafkaProducer 사용

    import org.apache.kafka.clients.producer.*;
    
    public class KafkaProducerExample {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("bootstrap.servers", "localhost:9092");
            props.put("acks", "all");
            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 = "my-value";
            ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value);
    
            producer.send(record, new Callback() {
                public void onCompletion(RecordMetadata metadata, Exception exception) {
                    if (exception == null) {
                        System.out.println("메시지 전송에 성공했습니다.");
                    } else {
                        System.out.println("메시지 전송에 실패했습니다.");
                        exception.printStackTrace();
                    }
                }
            });
    
            producer.close();
        }
    }
    

    위 코드는 KafkaProducer를 사용하여 메시지를 전송하는 예제입니다. 필요한 설정을 Properties 객체에 설정하고, ProducerRecord를 생성하여 send 메서드를 호출하여 메시지를 전송합니다.

  3. KafkaConsumer 사용

    import org.apache.kafka.clients.consumer.*;
    
    public class KafkaConsumerExample {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("bootstrap.servers", "localhost:9092");
            props.put("group.id", "my-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.singletonList(topic));
    
            while (true) {
                ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
                for (ConsumerRecord<String, String> record : records) {
                    System.out.println(record.key() + " : " + record.value());
                }
            }
        }
    }
    

    위 코드는 KafkaConsumer를 사용하여 메시지를 수신하는 예제입니다. 필요한 설정을 Properties 객체에 설정하고, subscribe 메서드를 호출하여 원하는 토픽을 구독합니다. 그런 다음 poll 메서드를 호출하여 메시지를 수신하고 처리합니다.

마무리

이를 통해 카프카와 자바를 사용하여 간단한 분산 시스템을 구축하는 방법에 대해 알아보았습니다. 카프카는 대량의 데이터를 신속하게 처리하고 여러 시스템 간에 실시간으로 데이터를 전송하는 데 매우 유용한 플랫폼입니다. 이를 통해 확장 가능하고 신뢰성 있는 분산 시스템을 구축할 수 있습니다.

참고 자료