6장 카프카 운영 가이드는 다음 내용에 대한 내용이다.
- 카프카 운영 환경에서 빈번하게 사용되는 중요한 명령어
- 클러스터 확장을 위한 주키퍼와 카프카 스케일 아웃 방법
- JXM를 이용한 카프카 모니터링 방법, 카프카 매니저 활용법
6.1 필수 카프카 명령어
카프카 명령어들은 설치 경로의 bin 디렉토리에 위치함
토픽 생성
~ /usr/local/kafka/bin/kafka-topics.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--replication-factor 1 --partitions 1 \
--topic peter-topic --create
# topic : 토픽명
토픽 리스트 확인
~ /usr/local/kafka/bin/kafka-topics.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--list
토픽 상세보기
~ /usr/local/kafka/bin/kafka-topics.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--topic peter-topic --describe
토픽 설정 변경
토픽 보관주기 설정 변경하는 경우
~ /usr/local/kafka/bin/kafka-configs.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--alter --entitity-type topics \
--entity-name peter-topic --add-config retention.ms=3600000
# 삭제 시는 -add-config 대신 --delete-config 사용
토픽 파티션 수 변경
주의 사항 : 카프카에서 토픽 파티션 수는 증가만 가능하고 감소는 불가능
파티션 수 2로 변경하는 경우
~ /usr/local/kafka/bin/kafka-topics.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--alter --topic peter-topic \
--partitions 2
key를 이용해 특정 파티션에 메시지를 전송하고 가져오는 형태로 운영하고 있다면,
파티션 수 변경 시 메시지 순서에 영향을 끼칠 수 있어서 주의해야 함
(프로듀서와 컨슈머에서 key를 이용해 특정 파티션 지정 가능함)
토픽 리플리케이션 팩터 변경
리플리케이션 팩터 변경하려면 json 파일을 만들어야 함
{
"version": 1,
"partitions": [
{
"topic": "peter-topic", "partition": 0, "replicas": [1,2]
},
{
"topic": "peter-topic", "partition": 1, "replicas": [2,3]
}
]
}
(replicas 갯수가 다를 수도 있는데 파티션마다 리플리케이션 팩터를 다르게 할수도 있는건가?)
replicas의 첫번째 값이 파티션의 리더가 된다.
~ /usr/local/kafka/bin/kafka-reassign-partitions.sh \
--zookeeper peter-zk001:2181,peter-zk002:2181,peter-zk003:2181/peter-kafka \
--reassignment-json-file /usr/local/kafka/rf.json --execute
컨슈머 상태와 오프셋 확인
~ /usr/local/kafka/bin/kafka-consumer-groups.sh \
--bootstrap-server peter-kafka001:9092,peter-kafka002:9092,peter-kafka003:9092 \
--group peter-consumer --describe
결과값에서 LAG은 현재 토픽의 저장된 메시지와 컨슈머가 가져간 메시지의 차이를 의미함
- LAG=0 : 컨슈머가 더 이상 가져갈 메시지가 없음
- LAG=5 : 컨슈머가 가져갈 것이 5개 남음
LAG이 높다는 것은 컨슈머가 읽어가지 못한 메시지가 많다는 것이므로,
계속 증가한다면 컨슈머나 파티션 수를 늘려서 대응 필요하며, 특정 파티션의 LAG만 증가한다면 해당 파티션의 컨슈머의 이상 유무 확인 필요함
6.2 주키퍼 스케일 아웃
새로운 서버에 주키퍼 설치
새로운 서버에 /data/myid 값 설정 추가
전체 서버에 새로운 서버 추가된 내용으로 zoo.cfg 파일 반영
기존 주키퍼 서버 1대씩 재시작 (리더를 마지막에 하는 것을 권장)
동기화 잘되고 있는지 확인
# 리더에서 명령어 실행 ~ echo mntr | nc localhost 2181 | grep zk_synced_followers # 출력 (팔로워 숫자 나오면 정상) zk\_synced\_follwers 4
6.3 카프카 스케일 아웃
새로운 브로커 서버의 카프카 설정 파일(server.properties)에 broker.id 부분만 추가하고 카프카 실행하면 됨
새로 추가한 브로커에도 리소스를 분산시키기 위해 파티션 분산 작업을 해야함
토픽 리플리케이션 팩터 변경을 새로운 브로커 포함하여 재작성하여 수행하면 됨
분산 작업을 통해 10기가 정도 이상의 파티션 이동이 발생하게 되면
네트워크 사용량이 급증하고 브로커에도 상당한 부담이 될 수 있으므로 안전하게 하려면 다음 방법을 추천함
- 토픽 사용량이 가장 적은 시간에 수행하는 방법
- 토픽의 보관 주기를 줄여서 임시로 사이즈를 축소시킨 후 작업하는 방법
6.4 카프카 모니터링
카프카 도큐먼트에서 가장 쉬운 방법으로 JMX를 추천하고 있음
다음 두 가지 방법 중 하나로 JXM 사용 설정을 할 수 있다.
- 카프카 실행 파일(kafka-server-start.sh)에 JXM 설정을 추가
- systemd를 이용한 환경 변수 추가
다음과 같은 항목들을 확인할 수 있다.
- 브로커 서버로 들어오는 초당 메시지 수
- 브로커 서버로 들어오는/나가는 초당 사이즈
- 복제되고 있지 않은 파티션 수 (알람 설정도 가능)
- 브로커 내 파티션/리더 수
위 항목들을 jconsole로 보거나 그래프로 만들어서 추이 확인 가능하다.
6.5 카프카 매니저 활용
- 카프카에서 기본으로 제공해주는 툴은 CLI 뿐임
- 카프카 매니저는 야후에서 개발하여 오픈소스로 공개한 카프카 운영툴로,
토픽 추가, 삭제, 설정 변경 등을 웹 GUI로 할 수 있다. - CLI 환경에서만 적용할 수 있는 기능도 몇 가지 있지만
카프카 매니저에서도 많은 기능이 있고 클러스터 상태 확인을 쉽게 할 수 있어서 많이 사용됨 - 사용하려면 별도로 설치 및 설정하여 사용해야 함
6.6 카프카 운영에 대한 Q&A
카프카 운영 시 옵션 변경 방법
옵션은 카프카 실행되면서 옵션 정보를 읽어옴. 원하는 옵션 변경 후 브로커를 1대씩 재시작하면 적용됨
디스크 사용량이 높은 경우
데이터 디렉토리에서 사용량이 높은 토픽의 보관 주기를 줄인다.
카프카 버전 업그레이드 방법
한 대씩 내렸다가 올리는 롤링 업그레이드 방법과 모든 브로커 종료 후 새로운 버전 실행하는 방법이 있음
후자가 좀 더 간단함
카프카 힙 사이즈 권장 설정
5~6GB 정도로 설정하고 남은 메모리는 페이지 캐시로 사용하기를 권장함
'개발' 카테고리의 다른 글
Dockerfile 에서 CMD, ENTRYPOINT 사용시 환경 변수 로딩 문제 (0) | 2022.01.14 |
---|---|
자주 사용하는 Docker 명령어 모음 (0) | 2021.10.22 |
카프카, 데이터 플랫폼의 최강자 - 4장 카프카 프로듀서 (0) | 2020.09.06 |
카프카, 데이터 플랫폼의 최강자 - 3장 카프카 디자인 (0) | 2020.08.30 |
카프카, 데이터 플랫폼의 최강자 - 2장 카프카 설치 (0) | 2020.08.26 |