반응형
1.사전준비
- Docker , Docker Compose 가 설치되어 있어야 한다.
- 카프카 cli 사용을 위해 kafka binary 버전을 미리 받아 실행 준비를 해둔다.
2. Docker-compose 작성
.env
CONFLUENT_VERSION=7.0.1
docker-compose.yml
version: '3'
networks:
jssvs-net:
external: true
services:
zookeeper:
image: confluentinc/cp-zookeeper:${CONFLUENT_VERSION}
hostname: zookeeper
restart: on-failure
ports:
- 2181:2181
volumes:
- ./zookeeper/data:/data
- ./zookeeper/logs:/datalog
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
networks:
- jssvs-net
kafka-1:
image: confluentinc/cp-kafka:${CONFLUENT_VERSION}
hostname: kafka-1
restart: on-failure
ports:
- 9091:9091
depends_on:
- zookeeper
volumes:
- ./kafka-1/data:/var/lib/kafka/data
environment:
KAFKA_BROKER_ID: 101
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-1:29092,EXTERNAL://localhost:9091"
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9091"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
networks:
- jssvs-net
kafka-2:
image: confluentinc/cp-kafka:${CONFLUENT_VERSION}
hostname: kafka-2
restart: on-failure
ports:
- 9092:9092
depends_on:
- zookeeper
volumes:
- ./kafka-2/data:/var/lib/kafka/data
environment:
KAFKA_BROKER_ID: 102
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-2:29092,EXTERNAL://localhost:9092"
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9092"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
networks:
- jssvs-net
kafka-3:
image: confluentinc/cp-kafka:${CONFLUENT_VERSION}
hostname: kafka-3
restart: on-failure
ports:
- 9093:9093
depends_on:
- zookeeper
volumes:
- ./kafka-3/data:/var/lib/kafka/data
environment:
KAFKA_BROKER_ID: 103
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka-3:29092,EXTERNAL://localhost:9093"
KAFKA_LISTENERS: "INTERNAL://:29092,EXTERNAL://:9093"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT"
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
networks:
- jssvs-net
manager:
image: obsidiandynamics/kafdrop
restart: "no"
ports:
- 9000:9000
environment:
KAFKA_BROKERCONNECT: kafka-1:29092
JVM_OPTS: "-Xms16M -Xmx48M -Xss180K -XX:-TieredCompilation -XX:+UseStringDeduplication -noverify"
depends_on:
- zookeeper
- kafka-1
- kafka-2
- kafka-3
networks:
- jssvs-net
- 참조 (https://github.com/jaysooo/kafka-flink-stack-docker-compose)
3. 컨테이너 생성 및 실행
# 1) network 생성
$ docker network create jssvs-net
# 2) docker-compose up
$ docker-compose -f docker-compose.yml up -d
-> 브라우저에서 http://localhost:9000 로 접속하면 kafdrop 이라는 web UI 로 카프카 정보를 확인할 수 있다
4. 간단한 실습
카프카 binary 버전을 다운로드 받은후 하위 bin 디렉토리에 CLI 쉘 스크립트를 이용한다.
kafdrop 에서도 토픽 생성은 가능하다.
# 1) 토픽 생성
$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9091 --topic my-topic1 --create --partitions 1 --replication-factor 1
# 2) 토픽 정보 보기
$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9091 --topic my-topic1 --describe
# 3) 토픽 구독하기 (consumer)
$ ./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9091 --from-beginning --topic my-topic1
# 4) 토픽 삭제 하기
$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9091 --topic my-topic1 --delete
5. 마치며
- 회사에서 운영 목적으로 사용할 flink 를 공부하면서 카프카도 함께 공부 하고 있는데, 어렵기도 하고 시간이 너무 부족하다.
- 주로 실시간 데이터는 kinesis 로 받아서, firehose + lambda 기반 ETL 처리로 손쉽게 구성했었는데 아무래도 현업에서는 카프카가 더 많이 쓰이기도 하고, 최근에 트렌드가 데비지움 카프카 커넥트로 CDC -> kafka 구성을 많이 하는 것 같다.
- 다음 포스팅에서 카프카와 연동하는 producer application 과 consumer application 을 간단하게 작성해서 업로드 하겠다.
- 바쁘다.. 바뻐
반응형
'Data Engineer' 카테고리의 다른 글
airbyte(에어바이트) 구축 및 실습 (0) | 2023.01.02 |
---|---|
airbyte (에어바이트) 기초 (1) | 2023.01.02 |
Apache kafka (카프카) 기초 (1) | 2022.08.19 |
kubernetes 기초 (1) (0) | 2021.12.01 |
pyspark 기초 (1) (0) | 2021.10.03 |