Operations/Kafka

[Kafka] Docker로 Kafka 구축

혬수 2024. 8. 19. 22:17

이미지 📌

https://hub.docker.com/r/apache/kafka

 

env 설정

# broker.env

## Kafka 브로커가 특정 IP 주소와 포트에서 수신 대기하도록 설정하는 데 사용
KAFKA_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093 # default PLAINTEXT://:9092

## 클라이언트가 Kafka 브로커에 접근할 때 사용할 주소를 정의
## not valid to advertise the 0.0.0.0 meta-address
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:19092 # default null

## 다른 컨트롤러들과 통신 → 클러스터 내에서 리더 선출과 같은 작업을 협력하여 수행할 수 있도록
## broker와 controller 공통 env
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@controller:9093
  • replication-factor
    • Kafka 클러스터 broker 서버들에 총 몇개 topic 있을건지? → 안정성
  • partitions
    • 개별 broker 당 몇개의 통로 ? → 병렬처리
# broker.env      

KAKFA_DEFAULT_REPLICATION_FACTOR: 3 # default 1

## 소비자 오프셋 저장하는 내장된 토픽인 __consumer_offsets 토픽의 복제 요소를 지정
## replication-factor와 동일하게
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 # default 3

## 트랜잭션 로그가 여러 브로커에 복제되어 내결함성을 보장
## replication-factor와 동일하게
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 # default 3

## 최소 ISR 수 지정
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 # default 2

## topic마다 default partition 수
KAFKA_NUM_PARTITIONS: 1 # default 1
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic01 -replication-factor 2 –partitions 1
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topic02 -replication-factor 3 –partitions 1
# broker.env

## 프로듀서나 컨슈머가 존재하지 않는 토픽에 접근하려고 할 때 브로커가 토픽을 자동으로 생성할지 여부
## 프로덕션 환경에서는 false로 설정하여 불필요한 토픽 생성을 방지
KAFKA_AUTO_CREATE_TOPIC_ENABLE: true # default true

 

구조 📌

Kafka에는 로그, 이벤트 topic

이벤트 topic은 왜 ? → 멀티 모듈 기능 구현

 

 

구축 📌

docker-compose up -d
docker exec --workdir /opt/kafka/bin/ -it broker sh
# 진입
## --bootstrap-server는 advertised_listener 호스트:포트
./kafka-topics.sh --bootstrap-server <Private IP>:19092 --create --topic test-topic

 

연습

같은 VPC - EC2 인스턴스 2개

  • producer, comsumer
  • kafka

⇒ 통신 테스트

  • 기본적으로 같은 VPC는 프라이빗 IP로 내부 통신 가능
  • 프라이빗 서브넷의 인스턴스로 진입하려면, 퍼블릭 서브넷의 인스턴스에서 ssh -i <key> <AMI>@<private IP>
  • 같은 VPC 내 내부 통신 확인하려면 ping <private IP>

 

Todo

  • [x] broker, controller - 1개, localhost
  • [x] broker -1, controller - 1개, public ip
  • [x] localhost 되는지 다시 확인 후 네트워크 구조 확인 
    • docker exec -it <container> ip addr
    • 외부 클라이언트는 브로커에 접근할 때 호스트 IP와 포트 19092를 사용

  • [x] create topic 자동 될 수 있는지
  • [ ] replication-factor, partition 수 조정 및 env 설정

 

참고

https://kafka.apache.org/

https://investment-engineer.tistory.com/6

https://velog.io/@shinmj1207/Apache-Kafka-Docker-환경에서-Spring-boot-Kafka-연동하기

https://9hyuk9.tistory.com/92

https://velog.io/@kimsei1124/Apache-Kafka-with.-docker-compose