Kafka 사용 이유

  • 기존 데이터 통합 솔루션은 각 소스 애플리케이션과 타겟 애플리케이션 M to M 매핑으로 복잡하게 얽혀있음
  • 서비스 타겟이 많아질 수록 인터페이스가 많아짐

image

  • A와 A’가 잘못된 경우? A와 B’가 잘못된 경우? 회의만 하다가 시간 다간다!!

따라서 메시지 브로커 역할이 필요

환경 설정

vi ~/.bashrc

export CONFLUENT_HOME=/home/사용자명/confluent
export PATH=.:$PATH:/home/사용자명/confluent/bin

. .bashrc



Kafka 기동하기

  1. Zookeeper 기동
    $CONFLUENT_HOME/bin/zookeeper-server-start $CONFLUENT_HOME/etc/kafka/server.properties
    
  2. Kafka 기동
    $CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server.properties
    



Topic 개요

  • Topic은 Partition으로 구성된 일련의 로그 파일
  • key, value 기반의 메시지를 로그 파일에 연속적으로 저장하는 구조

image

  • 시간의 흐름에 따라 메시지가 순차적으로 물리적 파일에 write 됨

Topic과 Partition

  • Topic은 1개 이상의 파티션을 가질 수 있음
  • Topic의 partition은 병렬 성능과 기능의 핵심요소
  • 메시지는 개별 파티션에 분산 저장됨
  • 개별 파티션은 정렬되고, 변경할 수 없는 (immutable) 일련의 레코드로 구성된 로그 메시지
  • 개별 레코드는 offset이라고 불리는 일련 번호를 할당 받음
  • 개별 파티션은 서로 독립적, 개별 파티션 내에서 정렬되고 offset 할당됨

Topic과 Partition의 병렬 분산처리

  • 토픽의 파티션들은 단일 카프카 브로커 뿐만 아니라 여러개의 카프카 브로커들에 분산 저장됨

img.png

replication-factor

  • partition 2, replication-factor 2 적용 예시

img.png

  • Topic 생성
    kafka-topics --bootstrap-server localhost:9092 --create --topic 토픽명 --partitions 파티션 개수 
    --replication-factor 복제 개수
    
  • Topic 리스트 조회
    kafka-topics --bootstrap-server localhost:9092 --list
    
  • 특정 topic 상세 조회
    kafka-topics --bootstrap-server localhost:9092 --topic 토픽명 --describe
    
  • 특정 topic 삭제
    kafka-topics --bootstrap-server localhost:9092 --topic 토픽명 --delete
    



kafka-configs를 이용한 환경 설정

  • broker의 config 설정 확인
    kafka-configs --bootstrap-server localhost:9092 --entity-type brokers --entity-name {brokerId}
    --all --describe
    
  • topic의 config 설정 확인
    kafka-configs --bootstrap-server localhost:9092 --entity-type topics --entity-name {토픽명}
    --all --describe
    
  • topic의 config 설정 변경
    kafka-configs --bootstrap-server localhost:9092 --entity-type topics --entity-name {토픽명}
    --alter --add-config max.message.bytes=2008800 # 압축 전 메시지 크기
    
  • 변경한 topic의 config 원복 (default)
    kafka-configs --bootstrap-server localhost:9092 --entity-type topics --entity-name {토픽명}
    --alter --delete-config max.message.bytes
    


broker와 topic 레벨 config

  • kafka 서버에서 설정되는 config
  • Topic의 config는 Broker에서 설정한 config를 따라가고 별도 지정 시 이를 따름
  • server.properties의 config는 변경 시 broker의 재기동이 필요한 static config이며, dynamic config는 kafka-configs를 통해 동적으로 변경

producer와 consumer 레벨 config

  • kafka 클라이언트에서 설정되는 config
  • client 레벨에서 설정되므로 server.properties에 존재하지 않고, kafka-configs로 수정 불가
  • client 수행 시 –property로 설정 가능