Notice
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Simple Brute-Force Algorithm
- 내돈후기
- 선형자료구조
- 알고리즘잡스
- Stack
- 큐
- basic data-structure
- 간단한 완전탐색
- Divide and Conquer
- dfs
- Queue
- 이진탐색
- Sort
- Adv. recursive function
- Advanced Sort
- 힙
- 고급정렬
- binary search
- heap
- 완전탐색
- 동적계획법
- 우선순위 큐
- 스택
- 깊이우선탐색
- 정렬
- parametric search
- 기본자료구조
- 개념
- hint
- 매개 변수 탐색
- Today
- Total
루시와 프로그래밍 이야기
8장 카프카 버전 업그레이드와 확장 본문
운영중인 카프카 클러스터에 미치는 영향을 최소로 줄이면서 버전을 업그레이드하는 과정을 실습
업그레이드 순서와 주의사항
8.1 카프카 버전 업그레이드를 위한 준비
- 현재 사용하고 있는 카프카의 버전이 무엇인지 확인하기
- 명령어를 이용하는 방법 : /usr/local/kafka/bin/kafka-topics.sh —version -> 2.6.0
- 카프카가 설치된 경로에서 jar파일들을 확인하는 방법 : 실습환경에서는 /usr/local/kafka 가 위치이므로 -> ls -l /usr/local/kafka/libs/kafka_*
- 차이점 파악 : 업그레이드 하려는 버전을 정하고 카프카의 릴리스 노트 등을 살펴보면서 버전 업그레이드 시 문제가 될 만한 부분은 없는지 확인
- 카프카 상위 버전은 클라이언트들의 하위 호환성을 갖고 있으므로 대부분 클라이언트 이슈는 없음
- 스칼라 컨슈머, 프로듀서처럼 서비스가 종료된 경우도 있으므로 전체적인 카프카의 릴리즈 노트를 확인해야 함
- 메이저 버전 업그레이드 : 1.x/0.x에서 2.x로 업그레이드 -> 다음과 같은 이슈가 있을 수 있음
- 메시지의 포맷 변경
- 브로커에서의 기본값 변화
- 과거에는 지원했던 명령어의 지원 종료
- 일부 JMX메트릭의 변화
- 마이너 버전 업그레이드 : 2.1에서 2.6로 업그레이드 -> 비교적 용이하게 업그레이드 할 수 있음
- *0.1 버전 이하에서 2.0으로 한번에 업그레이드 하지말고, 0.10 이후의 마이너 버전으로 먼저 업그레이드 한 후 다시 상위버전으로 진행하는 것을 원정
- 메시지 포맷에 타임스탬프 필드가 추가됨
- 업그레이드 방법
- 다운타임 가질 수 있는 방법 : 현 카프카 모두 종료 후 최신 버전의 카프카 실행 -> 간단하게 업그레이드 완료
- 가질 수 없는 방법 : 브로커 한 대씩 "롤링 업그레이드"
롤링 업그레이드 전략을 활용하여 카프카 서비스 중단없이 버전 업그레이드
8.2 주키퍼 의존성이 있는 카프카 롤링 업그레이드
**토픽삭제 : /usr/local/kafka/bin/kafka-topics.sh —bootstrap-server peter-kafka01.foo.bar:9092 —delete —topic peter-test06
**카프카 종료 : sudo systemctl stop Kafka-server
**(종료가 완료되면) 앤서블을 이용해 카프카 2.1버전을 설치 : ansible-playbook -i hosts kafka2.1.yml
카프카 버전이 변경되면서 명령어의 옵션이 변경되거나 삭제되는 경우가 있으므로,
자동화 스크립트 또는 프로그래밍 코드 등에서 작성한 명령어들이 잘 동작하는지를 반드시 확인해야 함
2.1의 경우 —bootstrap-server 사용 X
2.1의 경우 —bootstrap-server 사용 X
- 토픽생성 : /usr/local/kafka/bin/kafka-topics.sh —bootstrap-server peter-kafka01.foo.bar:9092 —create —topic peter-version2-1 —partitions 1 —replication-factor 3
-> 토픽 생성 실패 및 bootstrap-server옵션 인식 불가 오류 발생 : 카프카 2.1버전에서는 bootstarp-server 옵션 존재 x
-> 대응책, 주키퍼를 이용하는 옵션 : /usr/local/kafka/bin/kafka-topics.sh —zookeeper peter-zk01.foo.bar —create —topic peter-version2-1 —partitions 1 —replication-factor 3 - 콘솔 프로듀셔를 이용해 메시지를 전송
-> /usr/local/kafka/bin/kafka-console-producer.sh —broker-list peter-kafka01.foo.bar:9092 —topic peter-version2-1
> Version2-1-message1
> Version2-1-message2
> Version2-1-message3
-> 컨슈머에서 확인 가능 : /usr/local/kafka/bin/kafka-console-consumer.sh —broker-list peter-kafka01.foo.bar:9092 —topic peter-version2-1 —from-beginning —group perter-consumer
8.2.1 최신 버전의 카프카 다운로드와 설정
- 2.1 -> 2.6으로 kafka 디렉토리 링크 변경 전에
- 설정파일 복사 : sudo cp kafka_2.12-2.1.0/config/server.properties kafka_2.12-2.6.0/config/server.properties
- sudo vi kafka_2.12-2.6.0/config/server.properties
-> 적용하지 않으면 이미 실행중인 2.1 버전 브로커들과의 통신이 불가능
inter.broker.protocol.version=2.1 //브로커 간의 내부 통신은 2.1 버전 기반으로 통신하며
log.message.format.version=2.1 //메시지 포맷도 2.1을 유지한다
8.2.2 브로커 버전 업그레이드
- 브로커 버전 업그레이드는 한 대씩 순차적으로 진행
- Peter-kafka01에 접속한 후 브로커 종료 -> 종료된 브로커가 갖고 있던 파티션의 리더들이 다른 브로커로 변경
- 카프카 종료 : cd /usr/local // sudo systemctl stop Kafka-server
- 카프카 심볼릭 링크 2.6으로 변경

sudo rm -rf kafka
sudo ln -sf Kafka_2.12-2.6.0 Kafka
ll
- sudo systemctl start kafka-server
- server.properties 설정 파일에서 내부 브로커 프로토콜 버전과 메시지 포맷 버전은 모두 2.1 로 설정했으므로, 다른 2.1 버전의 브로커들과 정상적으로 통신 가능

- 토픽 상세보기 명령어 /usr/local/kafka/bin/kafka-console-topics.sh —bootstrap-server peter-kafka01.foo.bar:9092 —topic peter-version2-1 —describe
-> 상세보기 확인하니 리플리케이션 정상/ISR 잘 동작 - 동일하게 2번브로커/3번브로커 업그레이드 진행
- 2번 브로커 접속
- /usr/local 경로로 이동
- 브로커 종료
- kafka 링크 삭제
- kafka 링크 2.6 버전으로 재생성
- 설정 파일 복사 및 옵션 설정
- 브로커 시작

- 완료 된줄 알았지? 8.2.1에서 브로커 프로토콜 버전과 메시지 포맷 버전을 2.1로 낮춰났으니 설정 변경 필요
8.2.3 브로커 설정 변경
- sudo vi kafka_2.12-2.6.0/config/server.properties 를 통해서 설정한 내용 삭제
- sudo systemctl restart kafka-server
- 8.2와 같이 이상없는지 메시지 전송 후 컨슈머를 이용해 메시지 가져와봄
8.3 카프카의 확장
카프카는 이렇게 폭발적으로 사용량이 증가하는 경우를 고려해 안전하고 손쉽게 확장할 수 있도록 디자인 됨
- 토픽생성 : /usr/local/kafka/bin/kafka-console-topics.sh —bootstrap-server peter-kafka01.foo.bar:9092 --create --topic peter-scaleout1 --partitions 4 --replication-factor 1

- 카프카 확장 실습을 위한, 브로커 한 대 더 추가하기 위해 주키퍼 서버 중 하나에 앤서블로 카프카 설치
- server.properties를 보면 broker.id=4 지정되어있는지 확인

- 토픽생성 : /usr/local/kafka/bin/kafka-console-topics.sh —bootstrap-server peter-kafka01.foo.bar:9092 --create --topic peter-scaleout2 --partitions 4 --replication-factor 1
-> 기존 토픽은 브로커를 추가했음에도 파티션들이 분산되지 않고 그대로 유지
-> 신규 토픽은 브로커마다 고르게 분산

8.3.1 브로커 부하 분산
- kafka-reassign-partitions.sh 도구 이용하면 파티션 이동 가능

'스터디 > 실전 카프카 개발부터 운영까지' 카테고리의 다른 글
13장 카프카의 발전과 미래 (0) | 2022.08.18 |
---|---|
4장 카프카의 내부 동작 원리와 구현 (0) | 2022.05.24 |
Comments