2020.05.13 - [MessageQueue/Kafka] - kafka cluster 구성
kafka 설치 (Single mode)
1. kafka 최신 파일 다운로드
💡 kafka는 단독으로 동작되지 않고 zookeeper에 의해 관리 되기 때문에 zookeeper를 함께 설치 하여하 한다. 기본적으로 kafka를 다운받으면 기본적으로 검증된 zookeeper 가 들어 있기때문에 다운 받지 않고 패키지 않에 들어 있는 zookeeper를 사용한다.
wget <https://downloads.apache.org/kafka/2.7.0/kafka_2.12-2.7.0.tgz>
--2021-03-18 15:37:56-- <https://downloads.apache.org/kafka/2.7.0/kafka_2.12-2.7.0.tgz>
Resolving downloads.apache.org (downloads.apache.org)... 88.99.95.219, 2a01:4f8:10a:201a::2
Connecting to downloads.apache.org (downloads.apache.org)|88.99.95.219|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 68684719 (66M) [application/x-gzip]
Saving to: ‘kafka_2.12-2.7.0.tgz’
100%[===================================================================================================================================================>] 68,684,719 8.93MB/s in 9.6s
2021-03-18 15:38:07 (6.85 MB/s) - ‘kafka_2.12-2.7.0.tgz’ saved [68684719/68684719]
tar -xvzf kafka_2.12-2.7.0.tgz
cd kafka_2.12-2.7.0
2. Zookeeper 설정
각 인스턴스에 설치된 Kafka의 config/zookeeper.properties 파일은 하나의 Zookeeper를 실행하는데 쓰이는 설정 파일이다. 이 말은 zookeeper1.properties, zookeeper2.properties, ookeeper3.properties 이런식으로 여러개의 설정파일을 만들고 하나의 장비에서 다중으로 실행할 수 있다는 의미이다.
설정파일을 다음과 같이 3대의 서버에 동일하게 추가하자.
vi config/zookeeper.properties
# the directory where the snapshot is stored.
dataDir=/data/zookeeper
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections
# since this is a non-production config
maxClientCnxns=0
initLimit=5
syncLimmit=2
새로 추가한 설정값은 클러스터를 구성하는데 필요한 설정 값들안데 여기서 주의할 점은 모든 Zookeeper 서버들은 동일한 변수 값을 가지고 있어야 한다.
2.1 zookeeper properties 옵션 정보
주키퍼 기본 옵션 정보
- initLimit
- 팔로워가 리더와 초기에 연결하는 시간에 대한 타임아웃 설정
- syncLimit
- 팔로워가 리더와 동기화 하는데에 대한 타임아웃.
- 즉 이 틱 시간안에 팔로워가 리더와 동기화가 되지 않는다면 제거 된다.
- 이 두값은 dafault 기본값이 없기 때문에 반드시 설정해야 하는 값이다.그리고 server.1,2,3의 숫자는 인스턴스 ID이다.
2.2. myid 설정
- zookeeper 설치후 myid 파일을 생성하여 각 서버의 고유 ID를 설정한다.
- myid 명시 파일은 dataDir=/data/zookeeper 폴더에 생성한다.
#server-(1)
mkdir -p /data/zookeeper
# Single Mode 에서는 설정 안해됨
echo 0 > /data/zookeeper/myid
3. Kafka 설정
Kafka의 config/server.properties 파일은 하나의 Kafka를 실행하는데 쓰이는 설정 파일이다. Zookeeper와 마찬가지로 여러개의 설정파일을 만들고 다중 실행을 할 수 있다. 설정파일 config/server.properties에 3대 서버 각 환경에 맞는 정보를 입력해 준다. (클러스터링 구성시 기본 3대구성)
> vim config/server.properties
#개발서버 1번 IP
##########################
#서버 1
##########################
broker.id=0
listeners=PLAINTEXT://:9092
# 컨슈머나, 프로듀서에서 접속할 아이피 혹은 도메인 정보 (설치된 서버의 아이피정보)
advertised.listeners=PLAINTEXT://127.0.0.1:9092
💡 zookeeper.connect 에서 마지막 /ykkim-kafka는 주기퍼노드명이다. 이를 설정 하지 않으면 주기퍼 루트노드에 저장된다. 그렇게 되면 관리하기가 어려우므로 이렇게 별도로 노드명을 기재해준다.
4. zookepper 및 kafka 실행
# 주키퍼 실행
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > /dev/null &
# 카프카 실행
nohup bin/kafka-server-start.sh config/server.properties > /dev/null &
#주키퍼 포트확인
netstat -ntlp | grep 2181
#카프카 포트확인
netstat -ntlp | grep 9092
#log 확인 (zookeeper, kafka)
tail -f /logs/server.log
5. Service 등록
5.1 주키퍼 서비스 등록 설정
vi /etc/systemd/system/zookeeper.service
[Unit]
Description=zookeeper
After=network.target
[Service]
Type=forking
User=root
Group=root
SyslogIdentifier=zookeeper
WorkingDirectory=/home/mezzo/message-queue/kafka_2.12-2.2.1/
Restart=always
RestartSec=0s
ExecStart=/home/mezzo/message-queue/kafka_2.12-2.2.1/bin/zookeeper-server-start.sh /home/mezzo/message-queue/kafka_2.12-2.2.1/config/zookeeper.properties
ExecStop=/home/mezzo/message-queue/kafka_2.12-2.2.1/bin/zookeeper-server-stop.sh
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start zookeeker.service
5.2 kafaka Service 등록 설정
서비스 시작 명령어 nohup bin/kafka-server-start.sh config/server.properties > /dev/null & ← 사용할것
vi /etc/systemd/system/kafka.service
[Unit]
Description=kafka
After=network.target
[Service]
Type=simple
User=root
Group=root
SyslogIdentifier=kafka
WorkingDirectory=/home/mezzo/message-queue/kafka_2.12-2.2.1/
Restart=always
RestartSec=0s
ExecStart=/home/mezzo/message-queue/kafka_2.12-2.2.1/bin/kafka-server-start.sh /home/mezzo/message-queue/kafka_2.12-2.2.1/config/server.properties
ExecStop=/home/mezzo/message-queue/kafka_2.12-2.2.1/kafka-server-stop.sh
[Install]
WantedBy=multi-user.target
5.3 데몬 등록 및 시작
- 서비스 데몬 재시작
- systemctl daemon-reload
- 주키퍼/카프카 실행
- systemctl start zookeeper.service
- systemctl start kafka.service
- 실행 상태 확인
- systemctl status zookeeper.service
- systemctl status kafka.service
- 시스템 부팅할때 자동실행 설정
- systemctl enable zookeeper.service
- systemctl enable kafka.service
- 서비스 로그 보기
- journalctl -u ${serviceName}
- journalctl -xe
'MessageQueue > Kafka' 카테고리의 다른 글
kafka partitioner 종류와 전략 (producer) (0) | 2023.06.12 |
---|---|
컨슈머 그룹(consumer group) offset 관리 및 reset 방법 (0) | 2023.06.09 |
브로커? 파티션과, 리플리케이션, ISR 이란? (0) | 2023.06.09 |
kafka partitioner 란? (producer, consumer) (0) | 2023.06.08 |
kafka ack mode 란? (0) | 2023.06.08 |