카프카 브로커를 실행하기 위해서는 jdk가 설치되어 있어야한다.
아파치 카프카 애플리케이션 프로그래밍 with 자바 책 공부 내용 정리
카프카 브로커를 실행하기 위해 카프카 바이너리 패키지를 다운로드한다.
책 기준 버전이 2.5.0이기 때문에 해당 버전을 다운로드 해주었다.
wget https://archive.apache.org/dist/kafka/2.5.0/kafka_2.12-2.5.0.tgz
다운로드가 완료되면 tar 명령어로 압출을 풀어준다.
tar xvf kafka_2.12-2.5.0.tgz
카프카 브로커 힙 메모리 설정
카프카 브로커는 레코드의 내용은 페이지 캐시로 시스템 메모리를 사용하고 나머지 객체들을 힙 메모리에 저장하여 사용한다는 특징이 있다.
카프카 브로커는 1G, 주키퍼는 512MB로 힙 메모리가 기본 설정되어있다.
프리티어 인스턴스의 메모리는 1G로 설정되어 있기 때문에, 카프카 브로커와 주키퍼를 동시에 실행하면
Cannot allocate memory 에러가 출력되며 실행되지 않는다.
테스트 환경의 힙 메모리 사이즈를 수정해주도록 한다.
환경변수 선언문을 bash 쉘에 넣어주어 터미널을 재실행하더라도 해당 환경변수가 유지되도록 해준다.
vi ~/.bashrc
vi 편집기에서 i를 눌러 편집모드로 들어간 후 환경변수를 설정해준다.
export KAFKA_HEAP_OPTS="-Xmx400m -Xms400m"
esc키를 누른 후 :wq 를 입력하여 편집기를 빠져나온다.
스크립트 수정 후 바로 반영될 수 있도록 source 명령어를 실행해준다.
source ~/.bashrc
메모리 설정 부분 카프카 스크립트에서 확인하기
카프카가 설치된 폴더에서 cat 명령어를 통해 스크립트를 열어본다.
cat bin/kafka-server-start.sh
1 :: KAFKA_HEAP_OPTS이 환경변수로 지정되어 있지 않으면 기본 힙 메모리는 Xmx 1G, Xms 1G로 설정된다.
2 :: -daemon 옵션을 붙이면 백그라운드로 실행되어 터미널의 세션이 끊기더라도 카프카 브로커는 계속 동작한다.
해당 옵션을 생략할 경우, 포어그라운드로 동작한다.
카프카 브로커 실행 옵션 설정
config 폴더에 server.properties 파일에 카프카 브로커가 클러스터 운영에 필요한 옵션들을 지정할 수 있다.
server.properties | |
broker.id=0 | 실행하는 카프카 브로커의 번호(ID). 다른 카프카와 번호가 겹칠 경우 오류가 발생할 수 있다. |
listeners=PLAINTEXT://:9092 | 카프카 브로커가 통신을 위해 열어둘 인터페이스 IP, prot, 프로토콜. 따로 설정하지 않으면 모든 IP와 포트에서 접근 가능 |
advertised.listeners=PLAINTEXT://13.124.99.218:9092 | 카프카 클라이언트 또는 카프카 커맨드 라인 툴에서 접속할 때 사용하는 ip와 포트 정보 ex) 퍼블릭IP:카프카기본포트 => 13.124.99.218:9092 |
SASL_PLAINTEXT,SASL_SSL:SASL_SSL | 보안 설정 시 프로토콜 매핑을 위한 설정 |
num.network.threads=3 | 네트워크 처리를 위한 스레드 개수 |
num.io.threads=8 | 카프카 브로커 내부에서 사용할 스레드 개수 |
log.dirs=/tmp/kafka-logs | 통신을 통해 가져온 데이터를 저장할 디렉토리 위치 |
num.partitions=1 | 파티션 개수. 파티션 수가 많아지면 병렬처리 데이터양이 늘어난다. |
log.retention.hours=168 | 카프카 브로커가 저장한 파일이 삭제되기까지 걸리는 시간 log.retention.hours보다는 log.retention.ms 값을 설정해 운영하는 것을 추천 log.retention.ms=-1로 설정 시 영원히 삭제되지 않는다. |
log.segment.bytes=1073741824 | 카프카 브로커가 저장할 파일의 최대 크기 크기를 채우면 새로운 파일 생성 |
log.retention.check.interval.ms=300000 | 저장한 파일을 삭제하기 위해 체크하는 간격 |
zookeeper.connect=localhost:2181 | 카프카 브로커와 연동할 주키퍼의 IP와 포트 설정 |
zookeeper.connection.timeout.ms=18000 | 주키퍼의 세션 타임아웃 시간 |
카프카 및 주키퍼 실행
주키퍼 실행 ::
카프카 바이너리가 포함된 폴더에 주키퍼도 준비되어 있다.
분산 코디네이션 서비스를 제공하는 주키퍼는 카프카의 클러스터 설정 리더 정보, 컨트롤러 정보를 담고 있어 카프라를 실행하는데에 필수 애플리케이션
상용환경에서는 안전하게 운영하기 위해 3대 이상의 서버로 구성해야 한다.
bin/zookeeper-server-start.sh :: 주키퍼 시작 스크립트
-daemon :: 백그라운드에서 실행
config/zookeeper.properties :: 주키퍼 설정 경로
jps :: JVM 프로세스 상태 조회(주키퍼가 jvm 위에서 동작)
-m :: main 메소드에 전달된 인자 확인
-v :: JVM에 전달된 인자 확인(힙 메모리 설정, log4j 설정 등)
카프카 실행 ::
✨ 참고 도서 정보 :: 아파치 카프카 애플리케이션 프로그래밍 with 자바 (최원영)
'Framework > Kafka' 카테고리의 다른 글
[Kafka] 아파치 카프카 기본 개념 :: 클라이언트 라이브러리 - 컨슈머 API (4) | 2024.09.25 |
---|---|
[Kafka] 아파치 카프카 기본개념 :: 클라이언트 라이브러리 - 프로듀서 API (3) | 2024.09.23 |
[Kafka] 아파치 카프카 기본 개념 (2) | 2024.09.13 |
[Kafka] 아파치 카프카 CLI 명령어 (1) | 2024.09.05 |
[Kafka] 아파치 카프카 (Apache Kafka) 란? (0) | 2024.08.23 |