1. KRaft 란?
: Kafka 의 기존 외부 의존성을 제거하고 Kafka 자체적으로 metadata 를 관리하기 위해 개발 됨
(기존에는 ZooKeeper 서버에 접속하여 관리하는 구조로써, ZooKeeper 를 대신하여 사용)
2. 왜 사용해야 할까?
KRaft는 2021년 아파치 Kafka 2.8 버전과 같이 공개되었으며, Apache Kafka 3.7 버전이 Zookeeper 모드를 지원하는 마지막 버전이고, 이후 Kafka 4.0 버전의 경우는 KRaft 모드로만 사용 가능
3. 사용방법
: KRaft 모드를 사용하려면 주키퍼가 필요 없으며, 대신 Kafka의 자체 메타데이터 관리와 컨트롤러가 처리
4. Quorum
: 분산 시스템에서 결정을 내리거나 작업을 수행하기 위한 최소한의 참여자 수 이며, 리더와 팔로워의 동기화, 컨트롤러의 결정 등에 중요한 역할을 하며, 이는 시스템의 일관성과 가용성을 보장하는 데 필요
(KAFKA_CONTROLLER_QUORUM_VOTERS 필드로 핸들링 가능)
5. 주요 옵션
- KAFKA_PROCESS_ROLES: 'broker,controller'
: Kafka 노드가 broker와 controller 역할을 동시처리
(KRaft 모드에서 모든 Kafka 노드는 컨트롤러 역할)
- KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29093,3@kafka-3:29093
: KRaft 모드에서 컨트롤러의 quorum을 설정하는 데 사용
- KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
: Kafka 브로커들이 서로 통신하는 내부 리스너의 이름을 설정
- KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
: Kafka가 컨트롤러와 통신하는 리스너의 이름을 설정
6. Docker Compose file
services:
kafka-1:
container_name: kafka-1
image: confluentinc/cp-kafka:latest
ports:
- "9092:9092"
volumes:
- ./data/kafka-1:/var/lib/kafka/data
networks:
- kafka-net
environment:
KAFKA_NODE_ID: 1
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092
KAFKA_LISTENERS: INTERNAL://:29092,CONTROLLER://:29093,EXTERNAL://0.0.0.0:9092
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29094,3@kafka-3:29095
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
CLUSTER_ID: "clusterid"
kafka-2:
container_name: kafka-2
image: confluentinc/cp-kafka:latest
ports:
- "9093:9093"
volumes:
- ./data/kafka-2:/var/lib/kafka/data
networks:
- kafka-net
environment:
KAFKA_NODE_ID: 2
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-2:29093,EXTERNAL://localhost:9093
KAFKA_LISTENERS: INTERNAL://:29093,CONTROLLER://kafka-2:29094,EXTERNAL://0.0.0.0:9093
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29094,3@kafka-3:29095
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
CLUSTER_ID: "clusterid"
kafka-3:
container_name: kafka-3
image: confluentinc/cp-kafka:latest
ports:
- "9094:9094"
volumes:
- ./data/kafka-3:/var/lib/kafka/data
networks:
- kafka-net
environment:
KAFKA_NODE_ID: 3
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka-3:29094,EXTERNAL://localhost:9094
KAFKA_LISTENERS: INTERNAL://:29094,CONTROLLER://kafka-3:29095,EXTERNAL://0.0.0.0:9094
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29094,3@kafka-3:29095
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
CLUSTER_ID: "clusterid"
networks:
kafka-net:
driver: bridge
파일명을 : docker-compose-kraft.yml 로 했을 시
아래 명령어를 입력하면 실행된다! (로컬 환경 기준)
docker-compose -f docker-compose-kraft.yml up -d
다음에는 두개의 동일한 이미지를 Zookeeper 사용 시와 KRaft 사용 시 부하 테스트를 실시했을때 어떤 성능차이를 보이는지 테스트 해볼 예정
'AMQP > Kafka' 카테고리의 다른 글
카프카는 어떻게 빠른 속도를 보이는 것인가? ( Kafka Buffer Pool ) (0) | 2025.02.21 |
---|---|
Kafka 세팅 시 참고할 만한 내용정리 (1) | 2024.10.01 |
Kafka 세팅 docker compose yaml (2) | 2024.09.12 |