본문 바로가기

빅데이터/Kafka

윈도우즈 wsl2 환경에서 로컬 카프카 브로커 연동하기

윈도우즈 wsl 환경에서 ipv6를 사용할 경우 localhost 또는 127.0.0.1 접근이 안될 경우가 있습니다. 이 경우 접근을 위해 다음과 같이 셋팅을 할 경우 접근이 가능합니다.

 

준비물

- wsl2

- Ubuntu

- Apache kafka 3.9.0

- Intellij CE

 

1) Apache kafka 3.9.0 다운로드 및 압축 풀기

https://kafka.apache.org/downloads 에서 3.9.0 바이너리를 다운로드 합니다.

이후 다운로드 받은 압축파일을 푼다.

 

2) Ubuntu 터미널 실행 및 다운로드 환경 접근

dvwy@dvwy:~$ cd /mnt/c/Users/choco/Downloads/kafka_2.12-3.9.0/kafka_2.12-3.9.0
dvwy@dvwy:/mnt/c/Users/choco/Downloads/kafka_2.12-3.9.0/kafka_2.12-3.9.0$

WSL 우분투 환경에서 윈도우즈 다운로드 디렉토리에 접근하기 위해서는 /mnt/c/Users/사용자이름/Downloads 로 접근하면 된다

 

3) config/server.properties 설정

$ vi config/server.properties
broker.id=0
listeners=PLAINTEXT://[::1]:9092

wsl 환경에 접근하기 위해 IPv6 기준 로컬호스트인 [::1] 을 입력한다. 이후 카프카 브로커를 실행한다.

1) 주키퍼 실행
$ bin/zookeeper-server-start.sh config/zookeeper.properties

2) 카프카 실행
$ bin/kafka-server-start.sh config/server.properties

 

4) kafka-console-producer.sh확인

$ bin/kafka-console-producer.sh --bootstrap-server [::1]:9092 --topic test
>a
>b
>c

[::1]:9092로 전송하여 데이터가 정상적으로 전달되는지 확인합니다.

 

5) /etc/hosts 수정

우분투 내에서 해당 host로 접근을 하는 추가 호스트를 만들기 위해 다음과 같이 수정합니다.

$ sudo vi /etc/hosts
[::1] my-kafka

// 이후 부터는 my-kafka:9092 로 접근 가능
$ bin/kafka-console-producer.sh --bootstrap-server my-kafka:9092 --topic test
>a
>b
>c

 

6) intellij CE 에서 접근 확인

public class SimpleProducer {
    private final static Logger logger = LoggerFactory.getLogger(SimpleProducer.class);
    private final static String TOPIC_NAME = "test";
    private final static String BOOTSTRAP_SERVERS = "[::1]:9092";

    public static void main(String[] args) {

        Properties configs = new Properties();
        configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);
        configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        configs.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

        KafkaProducer<String, String> producer = new KafkaProducer<>(configs);

        String messageValue = "testMessage";
        ProducerRecord<String, String> record = new ProducerRecord<>(TOPIC_NAME, messageValue);
        producer.send(record);
        logger.info("{}", record);
        producer.flush();
        producer.close();
    }
}

bootstrap-server에 [::1]:9092 로 설정했을 경우 정상 접근됨을 확인합니다.

 

7) hosts 설정 수정 및 확인 

메모장을 '관리자 권한으로 실행' 으로 실행합니다. 이후, \Windows\System32\drivers\etc\hosts 파일을 실행하여 다음과 같이 수정합니다.

이후 intellij CE에서 my-kafka:9092 로 접근해서 브로커와 연동되는지 확인합니다.

public class SimpleProducer {
    private final static Logger logger = LoggerFactory.getLogger(SimpleProducer.class);
    private final static String TOPIC_NAME = "test";
    private final static String BOOTSTRAP_SERVERS = "my-kafka:9092"; // 변경된 호스트

    public static void main(String[] args) {

... 생략

 

 

반응형