티스토리 뷰
728x90
🧩 Apache Pulsar 란 무엇인가요?
🐳 경량화 단일 노드 Pulsar | 개발/테스트용 standalone 모드로 실행하는 환경 |
⚙️ Pulsar 기능 제한형 구성 | Function, KoP, Tiered Storage 등을 제외한 최소 기능 셋 |
🎈 IoT, Edge 용 경량 Pulsar | 리소스 제한 환경을 위한 맞춤형 빌드 (예: ARM 등) |
☁️ Pulsar Proxy 기반 게이트웨이 | Kafka 클라이언트 또는 REST 게이트웨이만 얹은 경량 Pulsar Wrapper |
✅ PulsarLite = 흔히 “개발/테스트용 경량화 구성”을 의미
예시 1: Docker로 띄우는 Standalone Pulsar
docker run -it -p 6650:6650 -p 8080:8080 apachepulsar/pulsar:latest bin/pulsar standalone
👉 이게 흔히 말하는 “PulsarLite”로 불리는 형태입니다.
💻 개발 환경 | Kafka처럼 빠르게 로컬에서 돌리고 테스트하고 싶을 때 |
🧪 CI/CD 테스트 | 테스트 컨테이너로 빠르게 띄우고 기능 확인 |
🚀 빠른 프로토타이핑 | 클러스터 구성 없이 이벤트 기반 구조 실험 |
🧱 PulsarLite의 특징 (vs 정식 Pulsar 클러스터)
항목 | PulsarLite (standalone 등) | Pulsar 클러스터 |
구성 | 단일 노드, 간단 실행 | Broker + BookKeeper + ZooKeeper |
운영 | 개발용 | 운영용, 고가용성 |
기능 | 일부 비활성화 가능 | 전체 기능 사용 가능 |
확장성 | 낮음 | 매우 높음 (수평 확장) |
대표 포트 | 6650 / 8080 | 동일 |
📌 오해 방지
- Standalone Pulsar (개발용)
- Embedded Pulsar (애플리케이션 내에서 내장 실행)
- Mini Pulsar Cluster (1 브로커 + 1 BookKeeper)
- K8s용 lightweight Helm Chart
PulsarLite는 공식 이름은 아니며, **“간단하게 쓰는 Pulsar”**를 의미 | |
흔히 Docker 또는 Standalone 형태로 사용 | |
개발/테스트, Kafka 대체 실험용 등으로 매우 유용 | |
운영용 고가용성 구성을 위해서는 정식 Pulsar 클러스터 필요 |
🔄 Kafka-on-Pulsar (KoP) 활성화 시 작동 방식
항목 설명
Kafka API 호환 | Kafka의 Producer, Consumer 클라이언트를 그대로 사용 가능 |
브로커 포트 | Kafka 포트를 따로 열어야 함 (기본: 9092) |
백엔드 | 메시지는 Pulsar 내부에서 처리됨 (BookKeeper, 토픽 구조 등은 Pulsar 방식) |
토픽 매핑 | Kafka 토픽 → Pulsar 네임스페이스 + 토픽으로 매핑됨 |
🧪 예제 비교
아래는 Kafka Java 코드를 그대로 PulsarLite(KoP 활성화)에서 사용할 수 있음을 보여주는 예입니다.
✅ PulsarLite + KoP 환경 설정 (서버 측)
# pulsar broker.conf 또는 standalone.conf에 다음 항목이 있어야 함
messagingProtocols=kafka
kafkaListeners=PLAINTEXT://0.0.0.0:9092
kafkaAdvertisedListeners=PLAINTEXT://localhost:9092
☕ 동일 코드 테스트
Kafka Producer (변경 없음)
ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", "key", "Hello Kafka!");
- ✅ Kafka → Kafka 브로커: OK
- ✅ Kafka → PulsarLite (KoP): OK!
Kafka Consumer (변경 없음)
consumer.subscribe(Collections.singletonList("test-topic"));
- ✅ Kafka → Kafka 브로커: OK
- ✅ Kafka → PulsarLite (KoP): OK!
🧠 내부 작동 비교
항목 | Kafka | Pulsar + KoP |
클라이언트 코드 | Kafka Java API | Kafka Java API (그대로 사용) |
브로커 처리 방식 | 직접 디스크에 저장 | Pulsar → BookKeeper에 저장 |
소비 그룹 | Kafka의 Consumer Group | Pulsar의 Subscription으로 변환됨 |
Offset 관리 | Kafka 내부 관리 | Pulsar에서 별도 처리 |
Topic 구조 | test-topic | persistent://public/default/test-topic |
🔧 참고: 제한 사항 및 고려할 점
항목 | 설명 |
Kafka Streams, Connect 등 | 완전한 호환은 아님 (일부 기능 미지원) |
AdminClient 일부 기능 | 일부 Kafka Admin API는 미지원 가능 |
Latency | Kafka-native보다 다소 느릴 수 있음 |
보안 (SASL, ACL) | KoP는 보안 구성이 복잡할 수 있음 |
📊 KoP vs Kafka 성능 벤치마크 요약
테스트 도구: OpenMessaging Benchmark (OMB)
클러스터 구성: 동일한 HW 스펙에서 Kafka vs KoP 비교
테스트 기준: 1KB 메시지, 100개 토픽, 1000개 파티션, 1M 메시지
메트릭: TPS(Throughput), 평균 지연(latency), p99 지연
항목 Apache Kafka Pulsar with KoP
최대 TPS | 🟢 1,300,000 msg/s | 🔵 1,000,000 msg/s |
평균 지연 시간 | 🟢 5~10ms | 🔵 10~15ms |
99% 지연 시간 (p99) | 🟢 <20ms | 🔵 30~50ms |
Disk I/O 사용량 | 🔵 낮음 (BookKeeper 사용) | 🟢 높음 (Broker 직접 기록) |
CPU 사용률 | 🟢 낮음 | 🔵 상대적으로 높음 |
백프레셔 대응력 | 🔵 약함 | 🟢 강함 |
728x90
'Programming' 카테고리의 다른 글
UUID (Universally Unique Identifier) 란? (0) | 2025.03.31 |
---|---|
Kafka REST API 요청 API Gateway or custom 처리 (0) | 2025.03.31 |
HTTP/REST, gRPC, 메시지 브로커 기반 이벤트 소개 (0) | 2025.03.30 |
@ReflectionHint란? (0) | 2025.03.24 |
GraalVM Native 이미지로 빌드 에러 발생 원인 (0) | 2025.03.24 |