Kafka를 구동시켜보자 - CQRS 도입기

윤태호·2023년 5월 7일
0

Kafka를 구동시켜보자!!

필자는 저번 글에 MSK를 AWS를 활용하여 구축하는 것을 보여드렸습니다. 이제는 CUD 서버를 구축하여 Producer와 Consumer끼리 메세징을 잘 받는지 확인하려고 하였습니다.
하지만 Docker에서 Kafka를 띄울때는 Spring Boot와 연동이 잘 되었는데 MSK와 연동하고자 하면 지속적으로 Connection 오류가 발생하였습니다.

해당 EndPoint를 찾을 수 없었다가 주된 이유 였습니다.

왜 연결이 안될까??

MSK의 엔드 포인트를 지속적으로 연결을 하여도 Local에서는 접근을 못하는 이유는 MSK는 Private Subnet에서 구동하기에 Private EndPoint로 접속이 가능합니다. 그렇기에 외부 Local에서 단순히 Spring Boot에 Endpoint를 연결 시키더라도 접근이 거부 당합니다.
이를 해결하기 위한 여러가지 방법들이 있습니다.

  • AWS Direct Connect
  • VPC 피어링
  • AWS Transit Gateway
  • 같은 VPC에 존재하는 EC2를 통해 연결

위의 방법들 뿐만 아니라 여러가지 방법들이 존재하지만 결국 AWS의 또 다른
Tool을 이용해야한다는 번거로움과 요금 지불 비용이 생깁니다.
필자는 그나마 가장 친숙하고 비용을 지불하지 않는 EC2를 통해 연결 문제를 해결하였습니다.

EC2에서 어떻게 해결하는 건데??

EC2에서 해결할 수 있는 이유는 AWS가 설정한 같은 Subnet과 VPC를 이용하기에 Private 환경에 직접적으로 접속하자라는 취지입니다.

  • Spring Boot를 Docker Hub에 올려놓고 EC2에서 Image Pull을 통해 EC2에서 Spring Boot가 Run할 수 있도록 설정해주는 것입니다.

하지만 Run을 하기 전 과연 EC2가 MSK에 제대로 접근 할 수 있는지 확인 하기 위해 필자는 Kafka Client를 설치한 후에 Test를 진행 하였습니다.

클라이언트 머신 생성 및 테스트

클라이언트 머신 생성이란 MSK 클러스터와 통신해서 제어할 수 있는 관리 노드인 EC를 생성하고 설정하는 과정입니다. EC2가 MSK와 통신하고 제어하는 클라이언트 머신 역할을 하게 되는데요.
아래와 같은 과정을 통해서 Producer를 생성하고 Consumer에서 제대로 메세지를 읽어 내는 지 확인 할 수 있습니다.
아래의 코드와 사진과 함께 확인해보시죠!!

STEP 1. 클라이언트 머신에 Java 설치
$ sudo yum install java-1.8.0
STEP 2. Apache Kafka를 다운로드
$ wget https://archive.apache.org/dist/kafka/2.6.2/kafka_2.12-2.6.2.tgz
STEP 3. kafka 압축 풀기
$ tar -xzf kafka_2.12-2.6.2.tgz
STEP 4. 카프카 설치 디렉토리로 이동
$ cd <path-to-your-kafka-installation>/bin
STEP 5. 카프카 토픽(MSKTutorialTopic) 생성
$ ./kafka-topics.sh --create --zookeeper ZookeeperConnectString --replication-factor 2 --partitions 1 --topic MSKTutorialTopic

위의 과정에서 STEP5 토픽 생성 부분부터 사진과 함께 보여드리겠습니다.
우리는 토픽 생성을 하기 위해서는 Zookeeper 연결을 해야하므로 MSK에서 Zookeeper의 EndPoint를 가져옵시다.

** 참고로 Zookeeper는 Kafka의 메타데이터를 관리하는 분산시스템을 위한 서버로 이전 글 Kafaka에 다룰 때 설명이 있습니다.

  • 필자는 TLS 보안 처리를 하지 않았기에 일반텍스트로 주어진 ZooKeeper 연결 EndPoint로 연결하였습니다.

    제대로 연결되었다면, Topic이 생성되었다는 응답이 날라옵니다.

Producer & Consumer Test

위에서 우리는 EC2와 MSK의 연결 상태를 확인했고, Topic 생성까지 마쳤습니다. 이제는 Producer와 Consumer를 생성해보고 Test하는 과정을 보고자합니다.
무선 일련의 과정을 확인하기 위해 보안 설정을 위해 client.properties라는 파일을 만듭니다.

security.protocol=PLAINTEXT 작성해줍니다.

보안 설정이 끝났으면 이제 Topic에 Producer를 만들어 줍니다.

  ./kafka-console-producer.sh --broker-list BootstrapBrokerString --producer.config client.properties --topic MSKTutorialTopic

위의 EndPoint 주소는 예시니까 MSK에 들어가 자신의 EndPoint를 입력해주시면 됩니다. Producer 생성이 끝나면 아래와 같이 메세지를 입력할 수 있습니다.

이제 Producer 생성이 끝났으니 Consumer 생성을 진행해봅시다.

  ./kafka-console-consumer.sh --bootstrap-server BootstrapBrokerString --consumer.config client.properties --topic MSKTutorialTopic --from-beginning

여기서도 해당하는 MSK의 EndPoint를 입력해주시면 됩니다.

위의 사진과 같이 Producer에서 생성했던 메세지를 Consumer가 모두 읽어오는 것을 확인 할 수 있었습니다.

이번 글에서는 MSK와 Spring Boot와 연동하기 전에 MSK가 제대로 동작하는지 확인해보기 위해 EC2 환경에서 Kafka Client를 활용해서 확인해 보았습니다.

글을 마무리하며

다음 글부터는 이제 CUD 서버를 따로 생성하고 이를 MSK로 전송하는 글을 남기고자 합니다. 비록 아직 배워야할께 많지만 같이 배워가셨으면 좋겠습니다!!!

profile
성장하는것을 제일 즐깁니다.

0개의 댓글