Docker 환경, 카프카 클러스터 구축 및 토픽생성, 메시지 전송
Docker hub에 등록된 카프카 이미지(bitnami)를 사용하여 카프카 클러스터를 구축하고, 카프카에서 제공하는 쉘스크립트를 사용하여 구축한 클러스터에 토픽생성, 프로듀싱, 컨슈밍처리를 해보도록 한다.
카프카 관련 글
2021.12.27 - [Web] - 카프카(kafka) 개요 - 주요 용어 개념 정리
2021.12.31 - [Web] - 카프카(kafka) - VSCode에서 Java Producer/Consumer 생성 with Gradle
실행환경
- MacOS 12.0.1 ( on Apple silicon 10 cpu core / 32g ram )
- Visual Studio Code
- java 11
- Docker 실행환경
- Docker Images
- bitnami/kafka:3
- bitnami/zookeeper:3.7
bitnami image의 장점
Why use Bitnami Images?
- Bitnami closely tracks upstream source changes and promptly publishes new versions of this image using our automated systems.
- With Bitnami images the latest bug fixes and features are available as soon as possible.
- Bitnami containers, virtual machines and cloud images use the same components and configuration approach - making it easy to switch between formats based on your project needs.
- All our images are based on minideb a minimalist Debian based container image which gives you a small base container image and the familiarity of a leading Linux distribution.
- All Bitnami images available in Docker Hub are signed with Docker Content Trust (DCT). You can use DOCKER_CONTENT_TRUST=1 to verify the integrity of the images.
- Bitnami container images are released daily with the latest distribution packages available.
1. 이미지 다운로드
사용할 카프카 이미지를 Docker hub에서 다운받는다.
docker pull bitnami/kafka:3
docker pull bitnami/zookeeper:3.7
docker images
bitnami/zookeeper 3.7 ad331d1bde6a 2 days ago 468MB
bitnami/kafka 3 02141b3480a9 2 days ago 615MB
2. Docker-compose 생성/실행
아래의 docker-compose.yml을 생성하고 docker-compose up -d
명령을 실행한다.
version: "3.8"
networks:
kafka-net:
driver: bridge
services:
zookeeper:
image: bitnami/zookeeper:3.7
networks:
- kafka-net
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: bitnami/kafka:3
networks:
- kafka-net
ports:
- '9093:9093'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://localhost:9093
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=CLIENT
depends_on:
- zookeeper
- 프로듀서 / 컨슈머 역할의 클라이언트가 같은 네트워크에 위치할 수 있도록 network를 설정한다.
- bitnami 이미지는 옵션에 CFG는 kafka config에 다음과 같이 프로퍼티로 등록된다.
KAFKA_CFG_ZOOKEEPER_CONNECT
=>zookeeper.connect
프로세스 확인
docker ps
명령으로 zookeeper, broker 클러스터가 정상 기동 되었는지 확인한다.
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b70a4bcd986 bitnami/kafka:3 "/opt/bitnami/script…" 11 minutes ago Up 11 minutes 9092/tcp, 0.0.0.0:9093->9093/tcp kafka
a63fce1f35da bitnami/zookeeper:3.7 "/opt/bitnami/script…" 11 minutes ago Up 11 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp zookeeper
3. 메시지 전송 테스트
kafka
로 접속하여 메시지 전송을 테스트 한다. 먼저 두 개의 콘솔을 띄우고 아래 명령으로 접속하여 하나는 프로듀서, 나머지는 컨슈머 역할을 한다.
docker exec -it kafka /bin/bash
토픽
생성을 위해 둘 중 하나의 콘솔에 접속하여 토픽을 생성한다.
I have no name!@kafka:/$ kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1
Created topic test.
# 생성한 토픽 확인
I have no name!@256be080de9c:/$ kafka-topics.sh --list --bootstrap-server localhost:9092
test
I have no name!@kafka:/$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
>test
프로듀서
와 컨슈머
준비가 끝났다. 먼저 프로듀서에서 다음의 명령으로 메시지 전송을 준비한다.
I have no name!@kafka:/$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
>
--topic
에 위에서 생성한 토픽을 지정한다.
다음으로 컨슈머
콘솔에는 broker
에 test
이름의 토픽에 접근하여 메시지를 PULLING
한다.
I have no name!@kafka:/$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
위와 같이 모두 준비 되었다면 프로듀서에서 메시지를 입력하여 컨슈머에서 pull을 잘 받아오는지 확인한다.
Docker를 사용하여 간단한 단일 카프카 클러스터 환경을 구성하고 메시지 전송을 테스트했다. 다음 장에선 Java, Python 으로 간단한 애플리케이션을 만들어 메시지 전송을 해보도록 한다. 나아가서 자주 이용되는 Log4j, nginx 등의 서드파티에서 카프카 연동하는 방법을 알아본다.
'Web Programming' 카테고리의 다른 글
문제해결: No ParameterResolver registered for parameter (0) | 2022.06.07 |
---|---|
카프카(kafka) - VSCode에서 Java Producer/Consumer 생성 with Gradle (0) | 2021.12.31 |
카프카(kafka) 개요 - 주요 용어 개념 정리 (0) | 2021.12.27 |
Nginx log 관련 설정 파헤치기 (feat. AWS EC2) (0) | 2021.12.15 |
AWS EC2 웹 서버 nginx 설치, 설정 부터 실행까지 ( 프리티어 ) (0) | 2021.12.14 |