본문 바로가기

Docker,Jenkins

kafka 실행시켜보기 (feat. docker)

728x90

공식 문서에 나와있는 docker-compose.yml 내용을 그대로 복사붙여넣기하고 추가로 내가 필요한 부분은 더 추가해서 docker-network를 구성하였다 . 내용은 kafka와 zookeeper를 실행시키고 zookeeper를 그대로 연결해서 띄우는거다. 실제로 로컬에서 일일히 띄우기 귀찮았는데 docker를 사용하면 파일 하나만 실행시키면 자동으로 되는게 너무 편하다.

version: '3'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.0.1
    container_name: zookeeper
    ports:
      - "2181:2181"
    networks:
      - kafka-network  # Kafka와 관련된 컨테이너와 같은 네트워크 그룹에 속하도록 설정
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
  kafka:
    image: confluentinc/cp-kafka:7.0.1
    container_name: kafka
    ports:
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://kafka:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
    networks:
      - kafka-network  # Kafka와 관련된 컨테이너와 같은 네트워크 그룹에 속하도록 설정
      - default
  kafka-connect:
    image: confluentinc/cp-kafka-connect:7.0.1
    container_name: kafka-connect
    depends_on:
      - kafka
    environment:
      CONNECT_BOOTSTRAP_SERVERS: kafka:29092
      CONNECT_REST_PORT: 8083
      CONNECT_GROUP_ID: "answer-avro"
      CONNECT_CONFIG_STORAGE_TOPIC: "answer-avro-config"
      CONNECT_OFFSET_STORAGE_TOPIC: "answer-avro-offsets"
      CONNECT_STATUS_STORAGE_TOPIC: "answer-avro-status"
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_REST_ADVERTISED_HOST_NAME: "localhost"
      CONNECT_LOG4J_ROOT_LOGLEVEL: DEBUG
      CONNECT_PLUGIN_PATH: "/usr/share/java,/etc/kafka-connect/jars"
    ports:
      - "8083:8083"
    volumes:
      - ./connectors:/etc/kafka-connect/jars
      - ./config:/etc/kafka-connect/config
    networks:
      - kafka-network  # Kafka와 관련된 컨테이너와 같은 네트워크 그룹에 속하도록 설정
  mysql:
    image: mysql:latest
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 1248
    ports:
      - "3306:3306"
    networks:
      - kafka-network  # Kafka와 관련된 컨테이너와 같은 네트워크 그룹에 속하도록 설정
networks:
  kafka-network:
    driver: bridge  # 컨테이너를 연결할 커스텀 네트워크 그룹 생성

topic 만들기

docker exec broker kafka-topics --bootstrap-server broker:9092 --create --topic quickstart

topic이 생성되었다.

topic에 메세지를 전달해보자

docker exec -it broker kafka-console-producer --bootstrap-server broker:9092 --topic quickstart

명령어를 입력한 뒤 내가 보내고 싶은 메세지를 전송한다.

 

Consumer로 메시지 읽기

docker exec -it broker kafka-console-consumer --bootstrap-server broker:9092 --topic quickstart --from-beginning

다음 명령어로 consumer를 실행시켜 메세지를 읽어보자

 

그러면 내가 보낸 producer 의 내용이 consumer에 잘 나올 것이다.

728x90