반응형
주된 내용
- 설치 방법
- Systemd를 이용한 프로세스 관리 방법
- 카프카 운영 팁
- 설치 방법으로는 서버 직접 설치와 도커 활용 설치가 있는데, 이 글에서는 전자를 다룸.
- 카프카의 구성은 크게 4가지
- 프로듀서
- 카프카
- 컨슈머
- 주키퍼: 카프카의 메타데이터 정볼르 주키퍼에 저장하고, 카프카의 상태관리 등의 목적으로 사용.
2.1.카프카 관리를 위한 주키퍼
주키퍼란?
- 아파치 산하 프로젝트인 하둡, 나이파이, 에이치베이스, 스톰 등의 많은 애플리케이션이 부하 분산 및 확장이 용이한 분산 애플리케이션으로 개발
- 분산 애플리케이션을 사용하게 되면, 관리를 위한 안정적인 코디네이션 앱이 추가적으로 필요.
- 대용량 분산 처리 애플리케이션인 하둡의 중앙 관리 코디네이션 애플리케이션의 필요로 인해 서브 프로젝트로 개발되어졌음
- 카프카 또한 분산 애플리케이션의 한 종류로, 주키퍼를 코디네이션 로직으로 사용
- 코디네이션 시스템은 한 마디로,
부산 애플리케이션이 안정적인 서비스를 할 수 있도록 분산되어 있는 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공해줍니다.
주키퍼의 특징
- 여러 주키퍼 서버를 앙상블(클러스터)를 구성
- 분산 애플리케이션이 클라이언트가 되어 주키퍼 서버들과 커넥션을 맺고 정보를 주고 받음
- 상태 정보들은 지노드(znode)라 불리는 곳에 key-value 형태로 저장
- 지노드는 데이터를 정장하기 위한 공간 이름을 말하며, 일반 컴퓨터의 파일이나 폴더 개념이라고 생각
- 지노드의 사이즈는 바이트에서 킬로바이트 정도로 아주 작은편
- 일반적인 리눅스 디렉토리와 동일하게 부모 노드와 자식 노드가 있는 계층 구조주키퍼 계층형 구조(출처: http://zookeeper.apache.org/doc/current/zookeeperOver.html)
- 주키퍼의 지노드는 데이터 변경 등에 대한 유효성 검사를 위해 버전 번호를 관리하게 되며, 변경될 떄 마다 지노드의 버전 번호 증가(버저닝이 된다!)
- 주키퍼에 저장된 데이터를 메모리에 저장되어 처리량이 높고 속도가 빠름
주키퍼 앙상블의 특징
- 과반수 이상의 주키퍼 서버가 살아 있어야 운영 가능
- 총 3대의 주키퍼 서버가 앙상블 일때는 2대 이상 살아 있어야 운영 가능.
- 총 5대의 주키퍼 서버가 앙상블 일때는 3대 이상 살아 있어야 운영 가능.
- 앙상블로 구성되는 주키퍼 서버가 올라갈 수록 초당 처리량이 증가함.
- 데이터 서버의 코로케이션된 서버에 주키퍼 서버를 설치한다고 했을 때, 서로 다른 랙에 설치된 서버에 설치함으로써 갑작스런 랙 장애 발생시 영향 범위를 낮추는 등의 전략도 필요.
2.2. 주키퍼 설치
2.2.1. 주키퍼 다운로드
# 자바 설치
(직접 jdk gzi으로 설치하고 자바 홈을 설정해도 무관)
## centos
yum -y install java-1.8.0-openjdk
## ubuntu
apt-get install openjdk-8-jdk
# 주키퍼 stable 버전 다운로드
## stable 버전 확인(확인 주소: http://apache.mirror.cdnetworks.com/zookeeper/stable/)
## stable 버전 다운로드
## 예: wget http://apache.mirror.cdnetworks.com/zookeeper/stable/apache-zookeeper-3.5.9.tar.gz
wget http://apache.mirror.cdnetworks.com/zookeeper/stable/apache-zookeeper-<version>.tar.gz
# 압축 풀기
tar zxf apache-zookeeper-3.5.9.tar.gz
# 심볼릭 링크 생서
ln -s apache-zookeeper-3.5.9 zookeeper
# 주키퍼는 애플리케이션에서 별도의 데이터 디렉토리 사용.
## 이 노드에 지노드의 복사본인 스냅과 트랜잭션 로그 저장
## 모든 주키퍼 서버의 id를 다르게 설정
mkdir -p /data
echo 1 > /data/myid
# 환경 설정 파일 구성
vi ../zookeeper/conf/zoo.cfg
## 설정 본문
## node1, 2, 3의 경우 별도의 DNS 서버를 둬서 처리하거나,
/etc/hosts 설정 필요
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
2.2.2. 주키퍼 실행
# 실행
../zookeeper/bin/zkServer.sh start
# 중지
../zookeeper/bin/zkServer.sh stop
systemd 설정
# service 파일 변경
vi /etc/systemd/system/zookeeper-server.service
# service 파일 본문
[Unit]
Description=zookeeper-server # 유닛 설명
After=netwrok.target #유닛이 시작되는 순서를 조정. after에 짖어된 유닛이 실행된 이후에 시작
[Service]
Type=forking # 잘 모르겠음
User=root # 서비스 프로세스 실행 유저
Group=root # 서비스 프로세스 실행 그룹
SyslogIdentifier=zookeeper-server # syslog에서 구분 하기 위한 이름
WorkingDirectory=/usr/local/zookeeper # 주키퍼 경로
Restart=always # systemctl 명령어로 인한 중지를 제외하고, 프로세스가 종료된 후 재시작.
RestartSecs=0s # 이 옵션은 Restart 옵션과 연결되어 몇 오에 실행하지를 정함.
ExecStart=/usr/local/zookeeper/bin/zkServer.sh start # 서비스 시작 명령어 및 스크립트
ExecStop=/usr/local/zookeeper/bin/zkServer.sh stop # 서비스 중지 명령어 및 스크립트
# service 파일 수정 후 systemd 재시작
systemctl daemon-reload
# systemctl 실행/중지/재시작
systemctl start zookeeper-server.service
systemctl stop zookeeper-server.service
systemctl restart zookeeper-server.service
# 서버 부팅시 서비스 자동 실행
systemctl enable zookeeper-server.service
# 서비스 상태 확인
systemctl status zookeeper-server.service
2.3.카프카 설치
2.3.1. 카프카 다운로드
# 자바 설치
(직접 jdk gzi으로 설치하고 자바 홈을 설정해도 무관)
## centos
yum -y install java-1.8.0-openjdk
## ubuntu
apt-get install openjdk-8-jdk
# 주키퍼 stable 버전 다운로드
## stable 버전 확인(확인 주소: http://apache.mirror.cdnetworks.com/kafka/)
## stable 버전 다운로드
## 예: wget http://apache.mirror.cdnetworks.com/kafka/2.7.0/
wget http://apache.mirror.cdnetworks.com/kafka/<version>/kafka_<version>.tgz
# 압축 풀기
tar zxf apache-zookeeper-3.5.9.tar.gz
# 심볼릭 링크 생서
ln -s apache-zookeeper-3.5.9 zookeeper
2.3.2. 카프카 환경설정
카프카 환경 설정에 필요한 서버별 브로커 아이디, 카프카 저장 디렉토리, 주키퍼 정보 사전정리 필요
카프카 저장 디렉토리
주키퍼 처럼 각기 다른 myid 설정
# 카프카 호스트 이름과 브로커 아이디
kafka01 broker.id=1
kafka02 broker.id=2
kafka03 broker.id=3
저장 디렉토리 준비
- 데이터를 저장할 디렉토리를 여러 개로 설정 가능.
- 디스크가 여러 개면 디스크의 수 만큼 디렉토리를 설정해줘야 디스크 별로 I/O를 분산.
- 디렉토리는 카프카 브로커가 모두 동일하게 설정
주키퍼 정보
주키퍼 앙상블 서버 리스트를 모두 입력해야 주키퍼에 장애 발생해도 고가용성이 보장됨.
주키퍼, 카프카 설정시 통신 테스트 방법
nc -v 로 테스트
ex) nc -v 8443 192.168.100.200
카프카 환경설정
vi ../kafka/config/server.properties
# 주요 설정 항목
## broker.id=<broker-id>
## log.dir=<log-directory>
## zookeeper.connect=<zookeeper-ip:zookeeper-port,zookeeper-ip:zookeeper-port,zookeeper-ip:zookeeper-port....>
카프카 실행 방법
sh ../kafka/bin/kafka-server-start.sh <server.properties-path> &
백그라운드 실행을 위해 &을 붙여주거나 -daemon을 명령어 뒤에 붙여줘야함
카프카도 주키퍼와 동일하게 systemd 등록을 위해 서비스 설정 권장
2.4.카프카 상태 확인
TCP 포트 확인 방법
특정 포트가 Listen 중 인것으로 출력되면 정상
netstat -ntlp | grep <port-number>
주키퍼 지노드를 이용한 카프카 정보 확인
/usr/local/zookeeper/bin/zkCli.sh
ls <gnode-path>
ex) ls /peter-kafka/brokers/ids
카프카 로그 확인
cat ../kafka/logs/server.log
카프카 시작하기
# 토픽 생성
../kafka/bin/kafka-topics.sh --zookeeper <zookeepers> \
--replication-factor <replica-count>\
--partitions <partition-count> \
--topic <topic-name> --create
# 토픽 삭제
../kafka/bin/kafka-topics.sh --zookeeper <zookeepers> \
--topic <topic-name> --delete
# 카프카 프로듀서 쉘로 토픽 접근
../kafka/bin/kafka-console-producer.sh --broker-list <brokers> \
--topic <topic-name>
## > 프롬프트에 입력
# 카프카 컨슈머 쉘로 토픽 접근
../kafka/bin/kafka-console-consumer.sh --broker-list <brokers> \
--topic <topic-name> --from-beginning
반응형
'Book' 카테고리의 다른 글
[카프카, 데이터 플랫폼의 최강자] 4장. 카프카 프로듀서 (0) | 2021.09.29 |
---|---|
[카프카, 데이터 플랫폼의 최강자] 3장. 카프카 디자인 (0) | 2021.09.29 |
[카프카, 데이터 플랫폼의 최강자] 1장. 카프카란 무엇인가 (0) | 2021.09.29 |
[모던 자바 인 액션] 15장. CompletableFuture와 리액티브 프로그래밍 컨셉의 기초 (0) | 2021.09.29 |
[모던 자바 인 액션] 10장. 람다를 이용한 DSL (0) | 2021.09.29 |