Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
joohanhong
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
JooHan Hong
joohanhong
Commits
e55eb919
Commit
e55eb919
authored
Jun 09, 2022
by
JooHan Hong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kafka, setup init
parent
42550fb7
Pipeline
#5737
passed with stages
in 1 minute and 3 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
308 additions
and
0 deletions
+308
-0
README.md
DEVOPS/KAFKA/README.md
+308
-0
No files found.
DEVOPS/KAFKA/README.md
0 → 100644
View file @
e55eb919
[
![logo
](
https://www.hongsnet.net/images/logo.gif
)
](https://www.hongsnet.net)
# Zookeeper Overview
Zookeeper(주키퍼)는 분산 어플리케이션들을 위한
**오픈 소스 분산 관리 서비스**
이다. 다른 말로는 분산 코디네이터라고 한다. 따라서
**Kafka 클러스터 도입을 위해 반드시 설치해야하는 솔루션**
이다.
**Zookeeper**
는 전체 Node의 과반수가 살아있는 시점까지는 Fault Tolerance를 보장한다. 따라서
`최소의 Node 수는 3 대`
이다.
*
`3 Node`
에서는 1대 Server의 Fault에 대한 Fault Tolerance를 보장
*
`4 Node`
역시 1대 Server의 Fault에 대한 Fault Tolerance를 보장
`!중요`
: 위의 구성에 따라 시스템을 홀수로 구성하는 것이 권장
# Zookeeper 설치 및 구성
1.
설치 및 다운로드
```
bash
[
node N]# yum
install
-y
java-11-openjdk.x86_64
[
node N]# wget
--no-check-certificate
https://archive.apache.org/dist/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0.tar.gz
[
node N]#
tar
zxvf apache-zookeeper-3.7.0-bin.tar.gz
[
node N]#
mv
apache-zookeeper-3.7.0-bin /usr/local/zookeeper
[
node N]#
cp
/usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
[
node N]#
cd
/usr/local/zookeeper
```
2.
설정 및 데몬 기동
```
bash
[
node N]#
cat
conf/zoo.cfg
tickTime
=
2000
initLimit
=
10
syncLimit
=
5
dataDir
=
/var/lib/zookeeper
dataLogDir
=
/var/log/zookeeper
clientPort
=
2181
4lw.commands.whitelist
=
*
server.1
=
서버01:2888:3888
server.2
=
서버02:2888:3888
server.3
=
서버03:2888:3888
[
node N]#
mkdir
-p
/var/lib/zookeeper /var/log/zookeeper
[
node 1]#
echo
1
>
/var/lib/zookeeper/myid
[
node 2]#
echo
2
>
/var/lib/zookeeper/myid
[
node 3]#
echo
3
>
/var/lib/zookeeper/myid
```
만약
**systemd**
로 데몬을 제어하고 싶은 경우 다음과 같이 별도로 생성해야 한다.
```
bash
[
node N]#
cat
/etc/systemd/system/zookeeper.service
[
Unit]
Description
=
zookeeper-server
After
=
network.target
[
Service]
Type
=
forking
User
=
root
Group
=
root
SyslogIdentifier
=
zookeeper-server
WorkingDirectory
=
/usr/local/zookeeper
Restart
=
always
RestartSec
=
0s
ExecStart
=
/usr/local/zookeeper/bin/zkServer.sh start
ExecStop
=
/usr/local/zookeeper/bin/zkServer.sh stop
```
마지막으로 위의 service 파일을 flush하고 시작한 후 활성화 한다.
```
bash
[
node N]# systemctl daemon-reload
[
node N]# systemctl start zookeeper.service
[
node N]# systemctl
enable
zookeeper.service
```
!참고 : 만약 systemd를 사용하지않고, Zookeeper에서 기본적으로 제공하는 스크립트를 이용하려면, 다음과 같이 한다.
```
bash
[
node N]# ./bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
*
중지의 경우는
[
node N]# ./bin/zkServer.sh stop
```
3.
설치후 기본 구성 확인
아래와 같이 클러스터의 상태를 보면, 현재 2번 노드가
**리더**
인 것을 확인할 수 있다.
```
bash
[
node 1]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[
node 2]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[
node 3]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
```
주키퍼의 통계는 다음과 같이 간략하게 telnet 명령을 통해서 확인할 수 있다.
```
bash
# telnet localhost 2181
Trying ::1...
Connected to localhost.
Escape character is
'^]'
.
srvr
Zookeeper version: 3.8.0-5a02a05eddb59aee6ac762f7ea82e92a68eb9c0f, built on 2022-02-25 08:49 UTC
Latency min/avg/max: 0/0.0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 5
Connection closed by foreign host.
```
# Kafka 설치 및 구성
Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼 이다.
그럼, 다음과 같이 설치 및 구성을 진행 한다.
1.
설치 파일 다운로드
```
bash
[
broker N]# wget
--no-check-certificate
https://archive.apache.org/dist/kafka/3.0.1/kafka_2.13-3.0.1.tgz
[
broker N]#
tar
xvf kafka_2.13-3.0.1.tgz
[
broker N]#
mv
kafka_2.13-3.0.1 /usr/local/kafka
[
broker N]#
mv
/usr/local/kafka/config/server.properties /usr/local/kafka/config/server.properties_src
```
2.
설치 구성 및 데몬 기동
```
bash
[
broker 1]#
cat
server.properties
broker.id
=
1
listeners
=
PLAINTEXT://:9092
advertised.listeners
=
PLAINTEXT://브로커01:9092
num.network.threads
=
3
num.io.threads
=
8
socket.send.buffer.bytes
=
102400
socket.receive.buffer.bytes
=
102400
socket.request.max.bytes
=
104857600
log.dirs
=
/var/lib/kafka
num.partitions
=
1
num.recovery.threads.per.data.dir
=
1
offsets.topic.replication.factor
=
3
transaction.state.log.replication.factor
=
3
transaction.state.log.min.isr
=
1
log.retention.hours
=
168
log.segment.bytes
=
1073741824
log.retention.check.interval.ms
=
300000
zookeeper.connect
=
주키퍼01:2181,주키퍼02:2181,주키퍼03:2181
zookeeper.connection.timeout.ms
=
18000
group.initial.rebalance.delay.ms
=
0
[
broker 2]#
cat
server.properties
broker.id
=
2
listeners
=
PLAINTEXT://:9092
advertised.listeners
=
PLAINTEXT://브로커02:9092
num.network.threads
=
3
num.io.threads
=
8
socket.send.buffer.bytes
=
102400
socket.receive.buffer.bytes
=
102400
socket.request.max.bytes
=
104857600
log.dirs
=
/var/lib/kafka
num.partitions
=
1
num.recovery.threads.per.data.dir
=
1
offsets.topic.replication.factor
=
3
transaction.state.log.replication.factor
=
3
transaction.state.log.min.isr
=
1
log.retention.hours
=
168
log.segment.bytes
=
1073741824
log.retention.check.interval.ms
=
300000
zookeeper.connect
=
주키퍼01:2181,주키퍼02:2181,주키퍼03:2181
zookeeper.connection.timeout.ms
=
18000
group.initial.rebalance.delay.ms
=
0
[
broker 3]#
cat
server.properties
broker.id
=
3
listeners
=
PLAINTEXT://:9092
advertised.listeners
=
PLAINTEXT://브로커03:9092
num.network.threads
=
3
num.io.threads
=
8
socket.send.buffer.bytes
=
102400
socket.receive.buffer.bytes
=
102400
socket.request.max.bytes
=
104857600
log.dirs
=
/var/lib/kafka
num.partitions
=
1
num.recovery.threads.per.data.dir
=
1
offsets.topic.replication.factor
=
3
transaction.state.log.replication.factor
=
3
transaction.state.log.min.isr
=
1
log.retention.hours
=
168
log.segment.bytes
=
1073741824
log.retention.check.interval.ms
=
300000
zookeeper.connect
=
주키퍼01:2181,주키퍼02:2181,주키퍼03:2181
zookeeper.connection.timeout.ms
=
18000
group.initial.rebalance.delay.ms
=
0
[
broker N]#
mkdir
/var/lib/kafka
```
`!중요`
*
num.partitions=1
> 파티션 개수에 대한 설정이다. 이는 토픽 생성 시 이 설정과 반드시 같아야 문제가 발생되지 않는다.
*
offsets.topic.replication.factor=3
> 리플리케이션 개수에 대한 설정이다. 이는 토픽 생성 시 이 설정과 반드시 같아야 문제가 발생되지 않는다.
*
transaction.state.log.replication.factor=3
> 리플리케이션 개수에 대한 설정이다. 이는 토픽 생성 시 이 설정과 반드시 같아야 문제가 발생되지 않는다.
데몬의 경우 다음과 같이 systemd 기반으로 한다.
```
bash
[
broker N]#
cat
/etc/systemd/system/kafka.service
[
Unit]
Requires
=
network.target remote-fs.target
After
=
network.target remote-fs.target
[
Service]
Type
=
simple
User
=
root
Group
=
root
ExecStart
=
/bin/sh
-c
'/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties > /usr/local/kafka/kafka.log 2>&1'
ExecStop
=
/usr/local/kafka/bin/kafka-server-stop.sh
Restart
=
on-abnormal
[
Install]
WantedBy
=
multi-user.target
```
마지막으로 위의 service 파일을 flush하고 시작한 후 활성화 한다.
```
bash
[
broker N]# systemctl daemon-reload
[
broker N]# systemctl start kafka.service
[
broker N]# systemctl
enable
kafka.service
```
!참고 : 만약 systemd를 사용하지않고, Kafka에서 기본적으로 제공하는 스크립트를 이용하려면, 다음과 같이 한다.
```
bash
[
broker N]#
mkdir
/var/lib/kafka
[
broker N]#
pwd
/usr/local/kafka
[
broker N]# bin/kafka-server-start.sh
-daemon
config/server.properties
*
중지
[
broker N]# bin/kafka-server-stop.sh
```
3.
설치 후 기본 구성 확인
설치된
**Kafka의 버전**
은 다음과 같이 확인할 수 있다.
```
bash
[
broker N]# find /usr/local/kafka/
-name
\*
kafka_
\*
|
head
-1
|
grep
-o
'\kafka[^\n]*'
|
awk
-F
'-'
{
'print $2'
}
|
cut
-d
'.'
-f
1-3
3.0.1
```
그리고 클러스터에
**브로커의 리스트**
는 다음과 같이 확인할 수 있다.
```
bash
[
broker 1]# bin/kafka-broker-api-versions.sh
--bootstrap-server
172.24.0.171:9092 |
grep id
|
awk
'{print $(NF-6)}'
브로커01:9092
브로커02:9092
브로커03:9092
[
broker 2]# bin/kafka-broker-api-versions.sh
--bootstrap-server
172.16.0.172:9092 |
grep id
|
awk
'{print $(NF-6)}'
브로커01:9092
브로커02:9092
브로커03:9092
[
broker 3]# bin/kafka-broker-api-versions.sh
--bootstrap-server
172.24.0.173:9092 |
grep id
|
awk
'{print $(NF-6)}'
브로커01:9092
브로커02:9092
브로커03:9092
```
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment