1. Kafka 란?
: Apache 재단에 등록된 오픈소스로써, 분산형 스트리밍, 대규모 트래픽처리, 대용량 데이터 처리를 원활하게 처리하기 Message Queue
Apache Kafka
Apache Kafka: A Distributed Streaming Platform.
kafka.apache.org
2. Kafka 최근 근황 및 구조
- kafka 의 구성은 main 의 역할인 kafka와 헬스체크 등 보조적인 역할인 zookeeper 가 있음.
- Apache Kafka 3.3 버전부터는 KRaft 를 합의 프로토콜로 공식 지정 함.(자체 메타 관리 가능)
- 4.0 버전부터는 Zookeeper 를 완전히 제거 함.
- 하지만, 대규모 기업 고객 대부분이 아직 ZooKeeper 기반 클러스터를 운영 하기때문에,
Kafka 의 상업 버전인 Confluent 에선 여전히 ZooKeeper 기반의 이미지를 최신 지원함
(향후 점진적 전환 예정)
1) Kafka 기본구조(zookeeper 기반의 설명)
2) Producer
Producer는 데이터를 파티션에 따라 특정 브로커(리더)로 전송합니다.
전송 후 리더 브로커는 데이터를 먼저 받아 저장하고 바로 팔로워들에게 복제됩니다.
(Producer가 데이터를 리더 브로커에 보냄, 리더 브로커가 해당 파티션에 대한
주 데이터 저장소로 데이터를 기록, 팔로워 브로커도 데이터를 가져옴)
복제는 리더가 데이터를 받는 즉시 발생하는 것이 아니라, 리더가 데이터를 기록한 후에
복제 프로세스가 진행됩니다.
3) Consumer
4) Kafka Topic 및 Partition 구조 (/w Offset)
5) Key
6) Kafka broker 및 replication (Confluent version)
3. Kakfa setting 방법
: Kafka 를 세팅하는 방법에는 아래와 같이 여러가지가 있다.
그 중 우리는 3번으로 세팅해 보겠다(Docker Compose 기반)
1) on premise 로 직접 설치
2) docker 로 하나씩 띄우기
3) docker compose 로 한번에 띄우기
4) K8S 내 yaml 로 띄우기
5) K8S 내 kustomise 로 띠우기
6) K8S 내 helm 으로 직접 설치하기
4. Kafka docker compose로 띄우기
(Docker compose 가 설치되어있지 않는 경우 설치부터 하자!)
brew install cask docker-compose
아래는 Docker Compose 파일이다
version: "1"
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 3000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVER_ID: 1
kafka-cluster1:
image: confluentinc/cp-kafka:latest
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-cluster1:29092,EXTERNAL://localhost:9092
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
kafka-cluster2:
image: confluentinc/cp-kafka:latest
ports:
- "9093:9093"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-cluster2:29093,EXTERNAL://localhost:9093
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
kafka-cluster3:
image: confluentinc/cp-kafka:latest
ports:
- "9094:9094"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-cluster3:29094,EXTERNAL://localhost:9094
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 3
위의 docker compose 파일(파일명: docker-compose-kafka.yml)을 실행하려면
docker-compose -f docker-compose-kafka.yml up -d
7. Kafka Ui
Broker 현황, Topics 현황 및 저장된 Messages 정보, 각 토픽별 Offset 위치, 소비하고 있는 consumer의 group과 현황 등을 바로 알 수 있다.
version: "2"
services:
kafka-ui:
image: provectuslabs/kafka-ui
container_name: kafka-ui
ports:
- "8989:8080"
restart: always
environment:
- KAFKA_CLUSTERS_0_NAME=local
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-cluster1::29092,kafka-cluster2:29093,kafka-cluster3:29094
- KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181
'Kotlin Spring > Kotlin Spring 강의 내용' 카테고리의 다른 글
9) Kafka 기반 도메인 분리 (3) Saga 패턴이란? (0) | 2025.09.05 |
---|---|
9) Kafka 기반 도메인 분리 (2) 결제 시 쿠폰도메인을 완전하게 분리하기 (0) | 2025.09.05 |
8) Spring 캐시 (4) Redis 로 캐싱 관리 (0) | 2025.09.05 |
8) Spring 캐시 (3)redis란? (0) | 2025.09.05 |
8) Spring 캐시 (2)분산 캐시란? (0) | 2025.09.02 |