티스토리 뷰
* 카프드롭을 모르시는 분이 많은 것 같아서 사용방법만 적었다.
* 카프드롭은 간단한 토픽생성과 브로커에 메세지가 들어갔는지만 확인 가능하다. 토픽에 대한 자세한 옵션 설정을 카프드롭을 통해 할 수는 없다.
먼저 윈도우에 도커를 설치한다. 설치방법은 아래 블로그에 아주 자세하게 나와있다.
https://goddaehee.tistory.com/251
[Docker (1)] window10 Docker 설치하기(윈도우 10 도커 설치)
[Docker (1)] window10 Docker 설치하기(윈도우 10 도커 설치) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Window10 도커 설치 ] 입니다. : ) 도커 설치하기 ▶ 1. 도커란? 도커 설치와 관련된 포스팅 이기.
goddaehee.tistory.com
폴더 하나 만들고 그 아래 docker-compse.yml 파일을 만든다. 파일 안에 들어가야할 내용은 다음과 같다.
version: "3"
services:
kafka:
image: obsidiandynamics/kafka
restart: "no"
ports:
- "2181:2181"
- "9092:9092"
environment:
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
KAFKA_RESTART_ATTEMPTS: "10"
KAFKA_RESTART_DELAY: "5"
ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
healthcheck:
test: [ "CMD", "nc", "-z", "localhost", "9092" ]
interval: 10s
timeout: 5s
retries: 5
kafdrop:
image: obsidiandynamics/kafdrop:4.0.3-SNAPSHOT
restart: "no"
ports:
- "9000:9000"
environment:
KAFKA_BROKERCONNECT: "kafka:29092"
JVM_OPTS: "-Xms16M -Xmx48M"
depends_on:
- kafka
원래 아래버전이 잘 동작했었는데 오늘 오랜만에 docker compose up 을 해봤더니 kafdrop이 제대로 동작하지 않는 문제를 발견했다. obsidiandynamics님도 이 문제를 알았는지 7시간전에 새로운 버전을 올려주신것을 확인했다. 이미지 파일을 변경했더니 다행히 kafdrop이 잘 올라오는걸 확인할 수 있었다.
(근데 왜 latest 버전보다 4.0.3-SNAPSHOT이 더 최신이지? latest 배포했다가 뭔가 잘못되서 지금 수정중이신건가.)
변경하는김에 도커버전도 3으로 변경해서 kafka 가 완전히 안정된후에 kafdrop이 켜지게 끔 수정했고, jdk 13이상부터 noverify를 지원하지 않는다길래 해당 옵션도 삭제했다.
예전버전
version: "2"
services:
kafdrop:
image: obsidiandynamics/kafdrop
restart: "no"
ports:
- "9000:9000"
environment:
KAFKA_BROKERCONNECT: "kafka:29092"
JVM_OPTS: "-Xms16M -Xmx48M -Xss180K -XX:-TieredCompilation -XX:+UseStringDeduplication -noverify"
depends_on:
- "kafka"
kafka:
image: obsidiandynamics/kafka
restart: "no"
ports:
- "2181:2181"
- "9092:9092"
environment:
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ZOOKEEPER_SESSION_TIMEOUT: "6000"
KAFKA_RESTART_ATTEMPTS: "10"
KAFKA_RESTART_DELAY: "5"
ZOOKEEPER_AUTOPURGE_PURGE_INTERVAL: "0"
기존 이미지와 새로운 이미지의 차이를 알아보기 위해 kafdrop 이미지를 분석해보았다.
docker inspect obsidiandynamics/kafdrop:latest
docker inspect obsidiandynamics/kafdrop:4.0.3-SNAPSHOT
jdk-17.0.11+9 -> jdk-17.0.13+11
Ubuntu 22.04 -> 24.04
로 변경된걸 확인할 수 있었다. Kafdrop이 JDK 17이상부터 버그가 많다고 듣긴했는데 그 때문인가?
납득이 안되서 더 찾아봤더니 새로운 사실을 알 수 있었다.
Kafdrop github 레포지토리에 7시간전에 새로운 커밋이 올라온것을 확인했다.
latest 에 문제가 있어서 수정중인게 맞는것 같다.
내용을 보면 알수 있듯이 카프카 띄운 후에 카프드롭 띄우는게 전부인 도커 컴포즈 파일이다.
window powershell 을 켜고 도커 컴포즈 파일이 있는 폴더에서 아래 명령어를 입력한다. 최초 시도라면 각종 도커 이미지 파일이 로딩된 후에 카프카 컨테이너가 띄워질 것이다. 컴퓨터 성능에 따라 다르겠지만 대략 1~2분 정도 걸린다.
docker compose up
http://localhost:9000로 kafdrop에 접속한다.

접속이 잘되는가? 그럼 카프카가 잘 뜬것이다. 도커 컴포즈 파일을 보면 Kafdrop 생성 옵션에 depends_on: -kafka가 있기 때문에 카프카가 안떴으면 카프드롭도 안뜨기 때문이다.
(그리고 당연히 9000포트 이미 사용중이면 포트 충돌나서 안 뜬다. 왜 안 뜨는거지? 하고 삽질했는데 알고보니 9000이미 쓰고 있었음.. ㅂㄷㅂㄷ)
다음으로 세상에서 제일 간단한 카프카 프로듀서 코드를 만들어서 카프카에 메세지를 넣어보자.
import org.apache.kafka.clients.producer.*;
import java.util.HashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class ProducerApp {
public static void main(String[] args) {
HashMap<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
// 프로듀서 객체 생성 및 메시지 전송 요청
Producer<String, String> producer = new KafkaProducer<>(props);
ProducerRecord<String, String> record = new ProducerRecord<>("example-topic", "Hello World");
producer.send(record);
producer.close();
}
}
위 코드를 실행하면 아래처럼 example-topic 이 생성된걸 확인할 수 있다.
(참고로 미리 토픽을 안 만들어놔도 카프카의 기본 설정값은 토픽이 자동 생성되는 방식이기 때문에 따로 카프카 설정값을 변경하지 않은 상태라면 위 코드를 실행만해도 자동으로 토픽이 생성됐을 것이다. 이렇게 생성되는 토픽은 파티션이 1개다.)

example-topic 을 눌러서 들어가면 아래의 화면이 나온다. 파티션 0번을 들어가보자.

좋아 "Hello World" 메세지가 잘 들어갔다.

위의 화면에 보이는 것들을 조금 더 설명해보자면..
Partition 0 / Offset 0 / #messages 100
- 0번 파티션에 0번 offset부터 100개의 message 출력한다는 의미이다.
- 숫자값을 변경해서 200번 Offset부터 messages 1개만 출력하는 등 조절할 수 있다.
간단하게 Kafdrop을 이용하는 방법을 살펴봤다.
이제 Kafka를 사용하는 어플리케이션을 테스트 하는게 한결 편해졌을것이다!!
'기타개발' 카테고리의 다른 글
| 래빗엠큐 - 메시지 발행에서 성능절충 (1) | 2023.02.12 |
|---|---|
| 코틀린 인 액션 (1) 코틀린이란 무엇이며 왜 필요한가? (0) | 2022.06.13 |
| Hyper - V 가상머신 강제 삭제 (0) | 2022.04.23 |
| Git? Github? (2) | 2020.06.19 |
| [Javascript 문법] 화살표함수 (2) | 2020.01.27 |
