kafka Cluster 구축에 대해서 알아보자

Karim·2021년 10월 27일
3

kafka 운영

목록 보기
3/9
post-thumbnail

1. Version

💬

  • OS : CentOS Linux release 7.9.2009 (Core)
  • Kafka : 2.6.0

2. kafka 설치

💬

  • wget 명령어로 tgz 파일을 받아온다.
    wget http://archive.apache.org/dist/kafka/2.6.0/kafka_2.13-2.6.0.tgz

    [karim@Kafka_cluster karim]$ wget http://archive.apache.org/dist/kafka/2.6.0/kafka_2.13-2.6.0.tgz
    --2021-10-26 17:48:37-- http://archive.apache.org/dist/kafka/2.6.0/kafka_2.13-2.6.0.tgz
    Resolving archive.apache.org (archive.apache.org)... 138.201.131.134, 2a01:4f8:172:2ec5::2
    Connecting to archive.apache.org (archive.apache.org)|138.201.131.134|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 65537909 (63M) [application/x-gzip]
    Saving to: ‘kafka_2.13-2.6.0.tgz’
    100%[==========================>] 65,537,909 5.98MB/s in 10s
    2021-10-26 17:48:48 (5.99 MB/s) - ‘kafka_2.13-2.6.0.tgz’ saved [65537909/65537909]

  • 압축을 푼다
    tar -zxvf kafka_2.13-2.6.0.tgz

    [karim@Kafka_cluster karim]$ tar -zxvf kafka_2.13-2.6.0.tgz
    kafka_2.13-2.6.0/
    kafka_2.13-2.6.0/LICENSE
    .
    .
    .
    kafka_2.13-2.6.0/libs/kafka-streams-test-utils-2.6.0.jar
    kafka_2.13-2.6.0/libs/kafka-streams-examples-2.6.0.jar

3. 설정 파일 설정

💬 zookeeper 설정

vi config/zookeeper.properties

# 스냅샵 데이터를 저장할 경로 설정
dataDir=/data/zookeeper

# 클라이언트가 연결할 port 번호 설정
clientPort=2181

# 클라이언트에서 동시 접속하는 개수 설정 (default : 60 / unlimited : 0)
maxClientCnxns=0

# 팔로워가 리더가와 초기에 연결하는 시간에 대한 타임 아웃 설정
initLimit=10

# 팔로워가 리더와 동기화에 대한 타임 아웃 설정
# 이 틱 시간안에 팔로워가 리더와 동기화 되지 않으면 제거 된다.
syncLimit=5
tickTime=2000

#  port 충돌을 방지하려면 비활성화 해야 한다. (default : false)
admin.enableServer=false
admin.serverPort=2190

# Cluster 구성 서버 list 작성
server.1=server1:2182:2183
server.2=server2:2182:2183
server.3=server3:2182:2183

💬 server 설정

해당 설정은 첫 번째 server1에 대한 설정이다.
나머지 server2,3은 숫자만 바꿔주면 된다.

vi config/server.properties

# 브로커 넘버 설정
broker.id=1

# 브로커가 사용하는 호스트와 포트 지정
listeners=PLAINTEXT://:9092

# producer, consumer가 해당 kafka로 접근할 수 있게 광고할 호스트와 포트를 설정
advertised.listeners=PLAINTEXT://server1:9092

# 서버가 네트워크에서 요청을 받고 응답을 보내는데 사용하는 스레드 수 설정 (default : 3)
num.network.threads=3

# I/O 생길 때 생성되는 스레드 수 설정 (default : 8)
num.io.threads=8

# 소켓 서버에서 송신 하는 버퍼 사이즈
socket.send.buffer.bytes=102400

# 소켓 서버에서 수신 하는 버퍼 사이즈
socket.receive.buffer.bytes=102400

# 서버가 받을 수 있는 최대 요청 사이즈 (oom에 대한 보호)
socket.request.max.bytes=1048576000

# 로그 세그먼트 및 오프셋 데이터가 저장되어있는 경로 설정
log.dirs=/data/kafka/data

# topic 당 파티션 수 설정 (cluster 설정 이므로 default : 1)
num.partitions=3

# 시작 시 로그 복구, 종료 시 flush에 사용할 데이터 dir 당 스레드 수
num.recovery.threads.per.data.dir=1

# topic에 설정된 replication 수가 지정한 값보다 크면 새로운 토픽을 생성하고 작으면 broker 수와 같게 한다. (cluster 설정 이므로 default : 1)
offsets.topic.replication.factor=3
# 트랜잭션에 대한 레플리카 수 (cluster 설정 이므로 default : 1)
transaction.state.log.replication.factor=3
# 트랜잭션에 대한 재 정의 된 min.insync.replicas 구성 설정
transaction.state.log.min.isr=3

# 세그먼트 파일의 삭제 주기
log.retention.hours=24

# 세그먼트 파일의 사이즈
# 세그먼트 : topic 별로 수집한 데이터를 보관하는 파일
log.segment.bytes=1073741824

# 세그먼트 파일의 삭제 여부를 체크하는 주기 설정
log.retention.check.interval.ms=300000

# zookeeper 접속 정보 설정
zookeeper.connect=server1:2181,server2:2181,server3:2181

# zookeeper 접속 시도 제한 시간
zookeeper.connection.timeout.ms=18000

# 코디네이터가 파티션 리밸런싱을 처음 수행할 때나
#새로운 consumer 들이 추가 될 때 group에 참여할때 까지 대기하는 시간
group.initial.rebalance.delay.ms=3000

# 토픽을 삭제할 수 있게 설정
delete.topic.enable=true

4. myid 설정

  • server1
    echo 1 > /data/zookeeper/myid
  • server2
    echo 2 > /data/zookeeper/myid
  • server3
    echo 3 > /data/zookeeper/myid

5. 실행 (순서 중요)

💬 zookeeper 실행

zookeeper가 kafka의 메타 데이터를 관리하기 때문에 kafka 보다 먼저 실행해야 한다.!

  • 데몬으로 시작
    ./zookeeper-server-start.sh -daemon ../config/zookeeper.properties
  • 중지
    ./zookeeper-server.stop.sh

💬 kafka 실행

  • 데몬으로 시작
    ./kafka-server-start.sh -daemon config/server.properties
  • 중지
    ./kafka-server-stop.sh

6. console command로 kafka 동작 확인

💬 topic 생성

./kafka-topics.sh --create --bootstrap-server server1:9092,server1:9092,server1:9092 --topic karim-cluster-topic

[karim@Kafka_cluster bin]$ ./kafka-topics.sh --create --bootstrap-server server1:9092,server2:9092,server3:9092 --topic karim-cluster-topic
Created topic karim-cluster-topic.

💬 topic list 확인

./kafka-topics.sh --list --bootstrap-server server1:9092,server2:9092,server3:9092

[karim@Kafka_cluster bin]$ ./kafka-topics.sh --list --bootstrap-server server1:9092,server2:9092,server3:9092
__consumer_offsets
karim-cluster-topic

💬 console producer

./kafka-console-producer.sh --broker-list server1:9092,server2:9092,server3:9092 --topic karim-cluster-topic

[karim@Kafka_cluster bin]$ ./kafka-console-producer.sh --broker-list server1:9092,server2:9092,server3:9092 --topic karim-cluster-topic
>karim velog good

💬 console consumer

./kafka-console-consumer.sh --bootstp-server server1:9092,server2:9092,server3:9092 --topic karim-cluster-topic

[karim@Kafka_cluster bin]$ ./kafka-console-consumer.sh --bootstp-server server1:9092,server2:9092,server3:9092 --topic karim-cluster-topic
karim velog good


📚 참고

https://kafka.apache.org/documentation/
https://heodolf.tistory.com/11
https://mycup.tistory.com/299

profile
나도 보기 위해 정리해 놓은 벨로그

0개의 댓글