KRaft 모드
카프카에 대해 조사를 해보면 카프카의 메타 데이터, 브로커 상태, 토픽 상태 등을 관리하기 위해 주키퍼를 사용하는 것을 볼 수 있다. 그런데 docker kafka 이미지들을 보면 zookeeper 없이 구성된 docker-compose를 볼 수 있는데 카프카의 최근 버전에서는 주키퍼 없이 카프카를 사용할 수 있는 구조를 지향한다고 한다.
그래서 주키퍼없이 자체적으로 메타데이터를 관리하기 위해 만들어진 것이 KRaft 모드이고 QUORUM 컨트롤러는 KRaft 와 관련된 키워드이다.
bitnami/kafka
services:
kafka:
image: bitnami/kafka:latest
ports:
- '9092:9092'
environment:
# KRaft settings
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
# Listeners
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
CONTROLLER 와 관련된 환경값도 KRaft 와 관련된 것 같다.
ADVERTISED_LISTENERS 는 지정안하면 spring에서 kafka 연결을 못잡았다.
SECURITY_PROTOCOL_MAP 은 없어도 도커 잘 올라가고 연결되고 주고받는 거에는 문제없었다. 정확히 어떤 동작을 하는 보안인지는 모르겠지만 일단 두자.
참고 자료
https://docs.confluent.io/platform/current/kafka-metadata/config-kraft.html#configure-kraft
https://hoing.io/archives/4029
https://hub.docker.com/r/bitnami/kafka/
https://github.com/bitnami/containers/blob/main/bitnami/kafka/docker-compose.yml
'Kafka' 카테고리의 다른 글
kafka-spring Producer key에 따른 partition 배정 (0) | 2023.09.03 |
---|---|
spring kafka - @KafkaListener Annotation (0) | 2023.09.02 |
Kafka의 아키텍처를 알아보자 (0) | 2023.08.11 |