507 words
3 minutes
[kafka]09. DR Hands-on
01. 사전 지식
02. 개요
카프카 클러스터에서 장애를 유발하고, 설계 방식에 따른 동작을 관측한다.
03. 사전 준비
- Kafka Cluster : 3개의 브로커로 구성된 클러스터. docker 혹은 k8s로 구성
- Kafka Client : 1개의 클라이언트로 구성
- Kafka Topic : 테스트용 topic이 간단히 생성.
- (Optional) : Kafka Admain Client
04. 장애 유발 시나리오
장애의 구분
장애는 이 글에서는 크게 두 가지로 구분한다.
동시성 시나리오 : gettting
장에 단계에 따른 구분
- 원천 어플리케이션
- 프로듀서
- 브로커
- 컨슈머
장에 유형에 따른 구분
- 네트워크 장애
- 서버 장애
- 연결 장애
테스트 Tool
카프카에서 지원하는 trougdor라는 Fault Injection Tool을 사용해 장애 상황을 유도하고 동작을 관측한다.
Trougdor 제공 Fault Injection API
- NetworkPartitionFaultSpec
- ProcessStopFaultSpec
테스트 시나리오
-
- replication factor 3, min.insync.replicas 2로 설정한 토픽 에서 발생한 장애 (기본설정)
-
- replication factor 3, min.insync.replicas 3로 설정한 토픽 에서 발생한 장애 (정합성 보장 시나리오)
-
- replication factor 3, min.insync.replicas 1로 설정한 토픽 에서 발생한 장애 (가용성 보장 시나리오)
90 실습용 docker-compose
# service configservices: kafka-broker-01: # image: bitnami/kafka:3.8.1 # get from .env file build: context: . dockerfile: Dockerfile # install vim privileged: true cap_add: - NET_ADMIN restart: unless-stopped container_name: kafka-broker-01 hostname: kafka-broker-01 ports: - "10000:9094" # port binding environment: # set env - KAFKA_CFG_BROKER_ID=0 - KAFKA_CFG_NODE_ID=0 - KAFKA_KRAFT_CLUSTER_ID=6bcA_X9JR0eN9YhP3dYKnw - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-broker-01:9093,1@kafka-broker-02:9093,2@kafka-broker-03:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-broker-01:9092,EXTERNAL://127.0.0.1:10000 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 - KAFKA_CFG_PROCESS_ROLES=controller,broker - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER networks: - data-network volumes: - "data-volume-01:/bitnami/kafka"
kafka-broker-02: build: context: . dockerfile: Dockerfile privileged: true cap_add: - NET_ADMIN restart: always container_name: kafka-broker-02 hostname: kafka-broker-02 ports: - "10001:9094" environment: - KAFKA_CFG_BROKER_ID=1 - KAFKA_CFG_NODE_ID=1 - KAFKA_KRAFT_CLUSTER_ID=6bcA_X9JR0eN9YhP3dYKnw - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-broker-01:9093,1@kafka-broker-02:9093,2@kafka-broker-03:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-broker-02:9092,EXTERNAL://127.0.0.1:10001 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 - KAFKA_CFG_PROCESS_ROLES=controller,broker - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER networks: - data-network volumes: - "data-volume-02:/bitnami/kafka"
kafka-broker-03: build: context: . dockerfile: Dockerfile privileged: true cap_add: - NET_ADMIN restart: always container_name: kafka-broker-03 hostname: kafka-broker-03 ports: - "10002:9094" environment: - KAFKA_CFG_BROKER_ID=2 - KAFKA_CFG_NODE_ID=2 - KAFKA_KRAFT_CLUSTER_ID=6bcA_X9JR0eN9YhP3dYKnw - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-broker-01:9093,1@kafka-broker-02:9093,2@kafka-broker-03:9093 - ALLOW_PLAINTEXT_LISTENER=yes - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka-broker-03:9092,EXTERNAL://127.0.0.1:10002 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 - KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 - KAFKA_CFG_PROCESS_ROLES=controller,broker - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER networks: - data-network volumes: - "data-volume-03:/bitnami/kafka"Reference
[kafka]09. DR Hands-on
https://yjinheon.netlify.app/posts/02de/kafka/de-kafka-09_dr_handson/