You will be fine

<Kafka> 2. 카프카 설치 및 예제 만들기

by BFine
반응형

출처&참고 : https://product.kyobobook.co.kr/detail/S000201464167

 

카프카 핵심 가이드 | 그웬 샤피라 - 교보문고

카프카 핵심 가이드 | 카프카를 창시한 사람들이 쓰고, 카프카 개발에 참여한 한국인 개발자가 옮긴 핵심 실무서모든 엔터프라이즈 애플리케이션은 로그 메시지, 지표, 사용자 행동 혹은 외부로

product.kyobobook.co.kr

 

가. 설치하기 (Docker Compose) 

 a. Confluent ?

  -  카프카 도커 이미지를 찾아보니 Apache에서 제공하는것 이외에 엄청 다양한 이미지가 존재하는것을 볼수 있었다. 

      => 카프카 베이스 이미지에 좀 더 편리하게 쓰기위해 커스텀한 이미지들이다.  

  -  Confluent가 가장 많이 쓰이는 이미지로 보이고 UI도 제공하고 있어서 요걸로 카프카를 설치해보았다.  

 

 b. docker-compose.yml

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:7.7.1
    hostname: broker
    container_name: broker
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_NODE_ID: 1
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://0.0.0.0:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
      CLUSTER_ID: 'MkU3OEVBNTcwNTJENDM2Qk'

  schema-registry:
    image: confluentinc/cp-schema-registry:7.7.1
    hostname: schema-registry
    container_name: schema-registry
    depends_on:
      - broker
    ports:
      - "8081:8081"
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 'broker:29092'
      SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081

  -  여기서 zookeeper의 역할을 카프카 클러스터의 메타데이터와 컨슈머 클라이언트에 대한 정보를 저장하기 위해 사용한다.

      => 버전이 올라가면서 KRaft 모드가 default가 되어 zookeeper는 더이상 사용하지 않아도 된다고 한다. (위에는 그냥 추가해보았다)

출처 : https://docs.confluent.io/platform/current/kafka/multi-node.html#cp-multi-node

  -  위에 설정한 브로커 환경변수들 중에 리스너 설정은 그림처럼 내부 외부 통신용도로 사용된다고 보면 된다. 

출처 : https://docs.confluent.io/platform/current/schema-registry/index.html

    -  schema registry의 역할은 confluent에서 제공하는 컴포넌트로 데이터 스키마 관리 및 직렬화(역직렬화) 등을 담당하는 중앙저장소이다.

 

나.  카프카 사용해보기

 a. 토픽 만들기

kafka-topics --create --topic [topic-name] --bootstrap-server localhost:9092 --replication-factor 2 --partitions 3

  -  docker compose로 컨테이너를 실행하고 위의 명령어로 토픽을 생성할 수 있다.

 

 b. 메세지 발행하기

docker exec -it broker kafka-console-producer --topic [topic-name] --bootstrap-server localhost:9092

  -  위의 명령어를 이용하여 만든 토픽에 메세지를 발행할 수 있다. 

 

 c. UI 활용하기 

  kafdrop:
    image: obsidiandynamics/kafdrop
    restart: "no"
    ports:
      - "9000:9000"
    environment:
      KAFKA_BROKERCONNECT: "broker:29092"
    depends_on:
      - "broker"

  -  명령어가 길다보니 이것저것 해보기에는 적합하지 않기 때문에 다양한 UI 제공해주는 것들이 있었는데 그 중에서 kafdrop을 사용해 보았다

  -  위의 이미지에서 볼수 있듯이 아까 발행한 메세지가 test-topic에 2번 파티션에 저장된 것을 UI로 볼 수 있다 (메세지 발행, 토픽생성 등 가능)

     =>  confluent의 control center UI가 좀 더 다양한 기능이 있는데 내가 못찾는건지 모르겠지만 발행된 메세지 내용을 보는게 없는것 같다..

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기