Free Lines Arrow
본문 바로가기
Message Queue/Kafka

[Kafka] 카프카 재처리 With DLQ1 - 기본구성

by skahn1215 2024. 12. 24.
728x90
반응형

카프카 재처리 

  • 카프카를 사용하여  컨슈머에서 에러 발생하는 경우 재처리 시도를 구현해본다.

 

재처리 조건

  • TimeOutException
  • DeadLockException

 

DLQ  조건

  • 재처리 익셉션이 아닌경우
  • 재처리가 3회 초과 되었을경우

 

플로우

 

 

 

Docker 설정

kafka 띄우기

docker-compose -f ./docker-kafka.yaml up

docker-kafka.yaml

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:2.12-2.5.0
    container_name: kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

 

 

리스너 주석 해제

vi /opt/kafka/config/server.properties 해당 파일에 접근 한뒤

listeners=PLAINTEXT://:9092  해당 부분이 주석이 되어 있을것인데 주석을 해제해 주자.



# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://:9092

 

 

토픽 생성

토픽 확인

kafka-topics.sh --list --bootstrap-server localhost:9092

아무것도 안나옴

 

토픽 생성

// like-topic 생성
kafka-topics.sh --create --topic like-topic  --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
Created topic like-topic. // 정상 생성시 메시지 출력됨.

// like-topic-dql 생성
kafka-topics.sh --create --topic like-topic-dlq  --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1

// 생성 토픽 확인
kafka-topics.sh --list --bootstrap-server localhost:9092 토픽 확인

like-topic // 조회 성공
like-topic-dql

 

 

MySql 띄우기

DB 는 shop 으로 정했습니다.

version: '3'
services:
  mysql:
    platform: linux/arm64
    image: mysql
    container_name: local-db
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: user
      MYSQL_PASSWORD: user
      MYSQL_DATABASE: shop
    volumes:
      - ./mysql-init.d:/docker-entrypoint-initdb.d
728x90
반응형

댓글