반응형

1.사전준비

  • Docker , Docker Compose 가 설치되어 있어야 한다.
  • 카프카 cli  사용을 위해 kafka binary 버전을 미리 받아 실행 준비를 해둔다.
 

Apache Kafka

Apache Kafka: A Distributed Streaming Platform.

kafka.apache.org

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

+ Recent posts