다운로드
이번에 MSA 프로젝트를 진행하면서 마이크로 서비스간 통신에 이벤트 브로커 역할을 할 카프카를 사용해보기로 했다.
https://kafka.apache.org/downloads
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
먼저 위의 사이트에서 tgz 파일을 다운받는다.
나는 윈도우 환경이라 압축을 푼 폴더 bin 폴더 안에 있는 windows 폴더에 속한 파일들을 사용할 것이다.


리눅스 / 맥 용은 확장자가 sh이지만 윈도우는 bat이다.
해당 폴더에 있는 파일들은 카프카의 핵심 기능을 사용할 수 있는 코어 역할을 하는 파일들이다.
실행할 서비스는 두 가지이다.
zookeeper server와 kafka server인데
주키퍼 서버는 카프카 서버를 관리하는 역할을 담당한다. 카프카 서비스들의 노드를 관리하고, 리더 선출 등의 역할을 한다.
카프카 서버는 메시지 큐 등의 실시간 데이터 처리를 하는 서비스이다.
실행
https://kafka.apache.org/quickstart
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

압축을 푼 폴더 즉, 카프카 홈 역할을 하는 위치에서 위와 같이 입력해 준다. 실행순서 상 주키퍼 서버를 먼저 실행해야 하므로 위의 명령어 먼저 실행했다. 실행할 때는 여러 설정정보를 담고 있는 properties 파일을 같이 지정해 주어야 한다.

이런식으로 뜨면 잘 실행된 것이다. 다음엔 카프카 서버를 실행해보자.
새 파워쉘 창을 열어서 실행해보자.
.\bin\windows\kafka-server-start.bat .\config\server.properties

주키퍼처럼 무언가 많이 뜨면 잘 실행된 것이다.
문제 해결
만약 제대로 작성했는데 argument 길이라던가 관련해서 오류가 발생한다면 다른 경로로 옮겨서 실행해보자. 나도 그런 오류가 발생했는데 경로를 옮기니까 해결됐다.
테스트
카프카에서는 Topic이라는 것을 사용한다. 발행된 데이터를 토픽에 저장해놓고 해당 토픽을 구독하고 있는 서비스에서 해당 데이터를 가져가는 구조이다.
해당 과정을 위해서는 먼저 토픽을 생성해야 한다.
토픽 생성
.\bin\windows\kafka-topics.bat --create --topic test-events --bootstrap-server localhost:9092

위의 명령어를 통해 토픽을 생성해주자.
토픽 확인
.\bin\windows\kafka-topics.bat --describe --topic test-events --bootstrap-server localhost:9092

생성했던 부분에서 --create 부분을 --descibe로 바꿔서 실행해보면 현재 토픽의 사용 정보를 확인할 수 있다.
이제 메시지를 생성해보자.
Producer 실행
.\bin\windows\kafka-console-producer.bat --topic test-events --bootstrap-server localhost:9092

새 파워쉘 창을 열고 위의 명령어를 입력하면 > 가 생긴 것을 알 수 있다. 이 상태에서 여러가지 문장을 작성해보자.
다음은 이벤트를 구독하는 쪽을 생성해보자.
Consumer 실행
.\bin\windows\kafka-console-consumer.bat --topic test-events --from-beginning --bootstrap-server localhost:9092

이벤트 브로커의 특징은 발생한 이벤트들을 저장하고 있는다는 점이다. 그렇기 때문에 바로 수신하지 못한 이벤트를 나중에 실행했을 때 전부 받을 수 있다.
'공부 > 기타' 카테고리의 다른 글
| [Redis] Spring Data Redis 사용하기 (0) | 2024.05.21 |
|---|---|
| MapStruct는 Lombok보다 먼저 작성하자 (0) | 2024.04.29 |
| [테스트] 좋은 단위 테스트(Unit Test)를 위해서 (0) | 2024.02.19 |
| SOLID에 대해서 알아보자 (0) | 2024.02.12 |
| 정규 표현식(Regular expression) (0) | 2023.08.29 |