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가 서비스를 제공하는 주소 (내부적으로 바인딩하는 주소)
KAFKA_ADVERTISED_LISTENERS : 카프카 프로듀서, 컨슈머에게 노출할 주소 (외부에 오픈할 특정 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) : 리더, 팔로워 파티션에 데이터가 모두 적재되었는지 확인하는 옵션 (안정성이 보장됨)