From f544dcaca21518eae5b053ad7a152a7c1c4062a0 Mon Sep 17 00:00:00 2001 From: dhyeonkim Date: Tue, 13 Aug 2024 15:58:27 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=9D=B4=20=EC=A4=91?= =?UTF-8?q?=EC=9A=94=ED=95=98=EB=8B=A4=20[Kafka]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _posts/2024-07-29-Kafka.md | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/_posts/2024-07-29-Kafka.md b/_posts/2024-07-29-Kafka.md index 7192c5e..06e8145 100644 --- a/_posts/2024-07-29-Kafka.md +++ b/_posts/2024-07-29-Kafka.md @@ -23,6 +23,79 @@ mermaid: true --- +# Broker, Controller Docker Compose + +```yaml +services: + kafka_broker: + user: root + image: confluentinc/cp-kafka:latest + container_name: kafka_broker + ports: + - "9092:9092" + - "9101:9101" + - "29092:29092" + environment: + # 각 카프카 브로커의 고유 식별자 설정 + # ${BROKER_ID}: 환경 변수, 실행 시 지정된 값으로 대체 + KAFKA_NODE_ID: ${BROKER_ID} + + # 노드 역할을 'broker'로 지정 + # KRaft 모드: 'broker', 'controller', 또는 둘 다 가능 + KAFKA_PROCESS_ROLES: 'broker' + + # 브로커 간 통신에 사용할 리스너 이름 지정 + KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT' + + # 컨트롤러 통신에 사용할 리스너 이름 지정 + KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER' + + # 각 리스너에 대한 보안 프로토콜 매핑 + # 모든 리스너: 암호화되지 않은 PLAINTEXT 프로토콜 사용 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT' + + # 카프카가 수신할 주소와 포트 지정 + # PLAINTEXT: 29092 포트, PLAINTEXT_HOST: 9092 포트 사용 + KAFKA_LISTENERS: 'PLAINTEXT://:29092,PLAINTEXT_HOST://:9092' + + # 클라이언트에게 알릴 리스너 주소 지정 + # ${EXTERNAL_IP}: 환경 변수, 실제 IP 주소로 대체 + KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://${EXTERNAL_IP}:29092,PLAINTEXT_HOST://${EXTERNAL_IP}:9092' + + # KRaft 모드에서 컨트롤러 쿼럼 구성 지정 + # 3개의 컨트롤러(KAFKA1, KAFKA2, KAFKA3)가 29093 포트 사용 + KAFKA_CONTROLLER_QUORUM_VOTERS: '3001@${KAFKA1}:29093,3002@${KAFKA2}:29093,3003@${KAFKA3}:29093' + + # 오프셋 토픽의 복제 팩터 설정 + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 + + # 초기 리밸런싱 지연 시간 설정 + KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 + + # 트랜잭션 상태 로그의 최소 ISR(In-Sync Replicas) 설정 + KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 3 + + # 트랜잭션 상태 로그의 복제 팩터 설정 + KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 + + # JMX(Java Management Extensions) 포트 설정 + KAFKA_JMX_PORT: 9101 + + # JMX 호스트 이름 설정 + KAFKA_JMX_HOSTNAME: localhost + + # 카프카 로그 디렉토리 위치 지정 + KAFKA_LOG_DIRS: '/tmp/kraft-combined-logs' + + # 클러스터의 고유 식별자 설정 + CLUSTER_ID: 'kafka-cluster' + volumes: + - ./data:/var/lib/kafka/data + restart: always +``` + +--- + # 옵션 커스텀 고려해볼만한 것 ## 브로커 옵션