Docker Kafka 설정 이해

yoon__0_0·2024년 9월 3일

프로젝트

목록 보기
4/7
services:
  
  broker:
    image: confluentinc/cp-kafka:7.7.0
    hostname: broker
    # container_name: broker
    ports:
      - "9092:9092"
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT'
      KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092'
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_PROCESS_ROLES: 'broker,controller'
      KAFKA_CONTROLLER_QUORUM_VOTERS: '1@broker:29093'
      KAFKA_LISTENERS: 'PLAINTEXT://broker:29092,CONTROLLER://broker:29093,PLAINTEXT_HOST://0.0.0.0:9092'
      KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
      KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
      KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs'
      # Replace CLUSTER_ID with a unique base64 UUID using "bin/kafka-storage.sh random-uuid" 
      # See https://docs.confluent.io/kafka/operations-tools/kafka-tools.html#kafka-storage-sh
      CLUSTER_ID: 'MkU3OEVBNTcwNTJENDM2Qk'
  • KAFKA_NODE_ID: Kafka 에서 클러스터 구성 시, Node ID (필수 요소)

  • KAFKA_LISTENER_SECURITY_PROTOCOL_MAP : 각 리스너 이름을 보안 프로토콜에 맵핑할때 사용 {listener 이름}:{보안프로토콜}

    보안 프로토콜 종류
    PLAINTEXT : 암호화 없이 순수한 텍스트로 데이터 전송하는 리스너
    SSL : TLS 암호화를 사용하는 리스너 (필요한 경우 TLS 클라이언트 인증서 사용)
    SASL_PLAINTEXT : 암호화가 없지만 SASL 기반 인증을 사용하는 리스너
    SASL_SSL : TLS 기반 암호화 및 SASL 기반 인증을 사용하는 리스너

  • KAFKA_LISTENERS : kafka가 서비스를 제공하는 주소 (내부적으로 바인딩하는 주소)

    • PLAINTEXT_HOST://0.0.0.0:9092 => 모든 9092로 들어오는 포트를 받겠다.
    • PLAINTEXT://broker:29092 => 도커 안에서 브로커끼리 데이터를 주고받을 때 사용하는 것
    • CONTROLLER://broker:29093 => 도커 안에서 브로커 끼리 메타데이터 주고받을때 사용
  • KAFKA_ADVERTISED_LISTENERS : 카프카 프로듀서, 컨슈머에게 노출할 주소 (외부에 오픈할 특정 IP를 별도로 두기 위한 것)

    • PLAINTEXT://broker:29092 => 카프카 클러스터 구성시, 다른 카프카 브로커에게 카프카 데이터를 주고받을 때 이 포트를 통해서 사용
    • PLAINTEXT_HOST://localhost:9092 => 카프카를 컨슈머 혹은 프로듀서가 사용할때, 카프카의 메타데이터나 주소가 필요한데, 이때 어떤 정보를 줄래? (내 로컬호스트의 정보를 줄께!) 이는, 0.0.0.0이나 외부IP로 하면 이런 주소는 찾을수 없다고 에러가 뜸.
  • KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR : 토픽 파티션의 복제 수

  • KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS : 카프카 그룹이 초기 리밸런싱할때 컨슈머들이 컨슈머 그룹에 조인할때 대기 시간

  • KAFKA_TRANSACTION_STATE_LOG_MIN_ISR : 트랜잭션 토픽에 대한 min.insync.replicas 설정 재정의

min.insync.replica
프로듀서가 메시지를 보낼 때, (acks=all(-1) 설정일때) write를 성공하기 위한 최소 복제본의 수
데이터 유실을 방지하기 위해서는 1보다는 큰 값으로 설정. (보통 replica가 3일때, 2로 많이 사용함)

acks
프로듀서가 kafka에 데이터를 전달하고 데이터를 잘 받았는지 확인하는 옵션
acks = 0 : 데이터 전달후 확인하지 않음 (데이터 유실가능성은 있지만, 속도는 빨라짐)
acks = 1 : 데이터를 전달하고 리더 파티션에 정상적으로 적재되었는지 확인. (리더 파티션에 전달 후 다른 파티션들과 동기화 되기 전에 리더 파티션에 문제 발생시 유실 가능)
acks = all(-1) : 리더, 팔로워 파티션에 데이터가 모두 적재되었는지 확인하는 옵션 (안정성이 보장됨)

  • KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR : 트렌잭션 토픽의 replication factor를 지정.
  • KAFKA_PROCESS_ROLES: kraft mode일때 사용하며, broker, controller 를 가질 수 있음.
    • broker : 카프카 서버를 브로커로만 사용
    • controller : 카프카 서버를 정족수를 위한 컨트롤러로 사용
    • broker, controller : 두개다 사용함.
  • KAFKA_CONTROLLER_QUORUM_VOTERS : Kraft Mode 일때, 투표 할 정족수
  • KAFKA_INTER_BROKER_LISTENER_NAME : 내부 통신시 사용할 리스너
  • KAFKA_CONTROLLER_LISTENER_NAMES : Kraft Mode 일때, controlle 할수 있는 리스너
profile
신윤재입니다

0개의 댓글