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

- A와 A’가 잘못된 경우? A와 B’가 잘못된 경우? 회의만 하다가 시간 다간다!!
따라서 메시지 브로커 역할이 필요
환경 설정
vi ~/.bashrc
export CONFLUENT_HOME=/home/사용자명/confluent
export PATH=.:$PATH:/home/사용자명/confluent/bin
. .bashrc
Kafka 기동하기
- Zookeeper 기동
$CONFLUENT_HOME/bin/zookeeper-server-start $CONFLUENT_HOME/etc/kafka/server.properties - Kafka 기동
$CONFLUENT_HOME/bin/kafka-server-start $CONFLUENT_HOME/etc/kafka/server.properties
Topic 개요
- Topic은 Partition으로 구성된 일련의 로그 파일
- key, value 기반의 메시지를 로그 파일에 연속적으로 저장하는 구조

- 시간의 흐름에 따라 메시지가 순차적으로 물리적 파일에 write 됨
Topic과 Partition
- Topic은 1개 이상의 파티션을 가질 수 있음
- Topic의 partition은 병렬 성능과 기능의 핵심요소
- 메시지는 개별 파티션에 분산 저장됨
- 개별 파티션은 정렬되고, 변경할 수 없는 (immutable) 일련의 레코드로 구성된 로그 메시지
- 개별 레코드는 offset이라고 불리는 일련 번호를 할당 받음
- 개별 파티션은 서로 독립적, 개별 파티션 내에서 정렬되고 offset 할당됨
Topic과 Partition의 병렬 분산처리
- 토픽의 파티션들은 단일 카프카 브로커 뿐만 아니라 여러개의 카프카 브로커들에 분산 저장됨

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

- 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로 설정 가능