[NestJS/Kafka] Docker를 사용하여 Kafka 설치 및 운영하기
첫 포스팅으로 NestJS 프로젝트에서 Docker를 사용한 환경에서 Kafka를 설치하고 운영하는 방법에 대해서 살펴보려고 합니다! Apache Kafka 실행 환경 먼저 이해하기 Apache Kafka는 Java로 작성되었으며, Java Virtual Machine (JVM) 위에서 실행됩니다. 이것이 의미하는 바는, 아래와 같습니다. Kafka는 Java Runtime Environment (JRE)가 필요합니다. JVM이 메모리 관리, 가비지 컬렉션 등을 담당합니다. Kafka는 JVM의 특성(예: 힙 메모리 관리)을 활용합니다. JVM 튜닝을 통해 Kafka의 성능을 최적화할 수 있습니다. 인스턴스에서 실행되는 프로세스는 Zookeeper와 Kafka Broker로 구성됩니다. 각각의 역할만 간략히 살펴보고 자세한 내용은 <Kafka 핵심 개념 이해하기> 포스팅에서 다루겠습니다. Zookeeper 주키퍼: 주키퍼는 분산 코디네이션 서비스를 제공하는 오픈소스를 말합니다. 분산 코디네이션 서비스는 분산 시스템 내부에 상태 정보를 저장하고 데이터를 key-value 저장소로 저장 및 제공하는 서비스를 의미합니다. 카프카에서는 운영에 필요한 각종 설정과 상태들을 저장하는데 주키퍼를 사용합니다. 힙 메모리 지정: 주키퍼와 카프카 브로커는 JVM 위에서 돌아가는 애플리케이션으로서 힙 메모리(Heap Memory)를 지정해야합니다. 두 프로세스에 각각 400MB의 힙 메모리를 설정하려면 1G 이상의 램이 필요하므로 1GB 메모리를 가진 t2.micro 인스턴스 유형을 선택하여 실습해보시는 것을 권장합니다. (프리티어로 제공) Inbound, Outbound 보안 그룹 설정(프로토콜, 포트, 실행 IP 등 규칙): 인바운드 규칙은 발급받은 인스턴스 외부로부터 들어오는 트래픽을 뜻하고, 아웃바운드 규칙은 인스턴스로부터 나가는 트래픽을 뜻합니다.
1