● 카프카매니저 설치

 - 적당한 곳에 다운로드 후, 압축 해제(/opt)

wget https://github.com/yahoo/kafka-manager/archive/kafka-manager-2.0.0.2.tar.gz

tar -zxvf kafka-manager-2.0.0.2.tar.gzcd kafka-manager-2.0.0.2/

 - sbt이용하여 빌드 진행

./sbt clean dist

 - 빌드가 완료되면 zip으로 압축된 output파일 생성

unzip -d /opt/kafka-manager-2.0.0.2.zip

ln -s kafka-manager-2.0.0.2/ kafka-manager

 - 주키퍼 호스트 설정(kafka-manager.zkhosts)

vi conf/application.conf

kafka-manager.zkhosts="127.0.0.1:2181"

 - 실행

./bin/kafka-manager

 

카프카 매니저 접속 및 연동

 -  http://localhost:9000/ 접속

 - 클러스터 생성

 

 

'* KAFKA > KAFKA 설치' 카테고리의 다른 글

KAFKA 테스트  (0) 2019.07.22
KAFKA 설치  (0) 2019.07.22
KAFKA(카프카) & ZOOKEEPER(주키퍼)  (0) 2019.07.22

 주키퍼와 카프카 실행

 테스트

 - 주기퍼와 카프카가 정상적으로 포트가 오픈 되어 있는지 확인

### 주키퍼 포트확인

netstat –an | grep 2181

### 카프카 포트확인

Netstat -an | grep 9092

 - 포트가 정상적으로 LISTEN 상태이면 주기퍼 지노드를 이용해서 카프카 정보를 확인

./zookeeper/bin/zkCli.sh

 - 주키퍼로 접속한 다음  ls / 를 치면 기본 노드와 추가한 노드 확인

[incon-kafka, zookeeper]

 - 카프카 클러스터 노드들이 잘 연결되었는지 확인

ls /incon-kafka/brokers/ids

##출력결과

[1, 2, 3]

 - 잘되었으면 quit 로 종료

 

 - 토픽 생성

 

kafka-topics.sh --zookeeper kafka1:2181,kafka2:2181,kafka3:2181/incon-kafka --replication-factor 3 --partitions 1 --topic new-topic --create

 - 토픽 LIST 확인(둘 중 하나실행)

bin/kafka-topics.sh --list --zookeeper localhost:2181

bin/kafka-topics.sh --list --bootstrap-server localhost:9092

 - 토픽 환경설정 확인

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

 - 프로듀서

kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9092,kafka3:9092 --topic new-topic

 - 엔터를 치고 기다려면 > 프롬포트가 깜빡이면 메시지 입력

## 입력

> Hello Kafka1

> Hello Kafka2

 - 컨슈머

kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9092,kafka3:9092 --topic new-topic --from-beginning

 - 확인

## 출력

> Hello Kafka1

> Hello Kafka2

 

* PATH 설정

  -/home 디렉토리의 vi .bash_profile 에 추가

:/opt/kafka/bin:/opt/zookeeper/bin

이후 

주키퍼 실행 : zkServer.sh start

카프카 실행 : kafka-start.sh

'* KAFKA > KAFKA 설치' 카테고리의 다른 글

KAFKA Manager 설치  (0) 2019.07.22
KAFKA 설치  (0) 2019.07.22
KAFKA(카프카) & ZOOKEEPER(주키퍼)  (0) 2019.07.22

● 준비 환경

 - Virtualbox를 통해 Centos7에 설치

 - 기본적으로 클러스트를 구성하기 위해서 3대 설치

 - 보통 주키퍼3, 카프카3대로 별도로 구성하는데 여기서는 그냥 테스트용도이므로 가상머신 3대에 주키퍼랑 카프카를 같이 설치 진행

 - Centos7OpenJDK8 혹은 Oracle JDK8 Java8 버전 설치

 

● 설치 전 작업(ROOT)

 - 각 서버의 호스트 명 지정(필수조건은 아닌데, 설정해두면 편리)

hostnamectl set-hostname kafka1(호스트명)

hostnamectl set-hostname kafka2

hostnamectl set-hostname kafka3

자기 자신은 0.0.0.0 으로 호스트명과 세팅하고 다른 서버는 각각 아이피를 등록

vi /etc/hosts

0.0.0.0 kafka1

10.0.2.102 kafka2

10.0.2.103 kafka3

 - 주키퍼와 카프카를 위한 방화벽 설정

## 주키퍼 포트

firewall-cmd --permanent --zone=public --add-port=2181/tcp

firewall-cmd --permanent --zone=public --add-port=2888/tcp

firewall-cmd --permanent --zone=public --add-port=3888/tcp

## 카프카 포트

firewall-cmd --permanent --zone=public --add-port=9092/tcp

## 방화벽 재시작

firewall-cmd --reload

 

● 주키퍼(ZOOKEEPER) 설치

 - 적당한 곳에 Zookeeper를 다운로드 후, 압축 해제(/opt)

wget http://apache.tt.co.kr/zookeeper/stable/apache-zookeeper-3.5.5-bin.tar.gz

tar zxf apache-zookeeper-3.5.5-bin.tar.gz

ln -s apache-zookeeper-3.5.5-bin zookeeper

 - 각각의 서버에 주기퍼 노드를 구분하기 위한 id필요 (루트 계정일 경우에는 mkdir -p /data)

#(1: kafka1, 2: kafka2, 3: kafka3)

echo 1 > /tmp/zookeeper/myid

 - 설정파일

 - zookeeper/conf 안에 zoo_sample.cfg가 있으니 zoo.cfg로 복사해서 사용

cd zookeeper/conf

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

 - 아래처럼 주석을 풀고 추가작성을 하도록 한다. 3개의 서버에 모두 같은 설정

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/ tmp/zookeeper

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=kafka1:2888:3888

server.2=kafka2:2888:3888

server.3=kafka3:2888:3888

● 주키퍼 실행

 - 실행

./zookeeper/bin/zkServer.sh start

 - 정상 START

ZooKeeper JMX enabled by default

Using config: /opt/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

 - 서비스등록을 위해 종료

./zookeeper/bin/zkServer.sh stop

 

 설정파일

vi /etc/systemd/system/zookeeper.service

[Unit]

Description=zookeeper

After=network.target

[Service]

Type=forking

User=incon

Group=incon

SyslogIdentifier=zookeeper

WorkingDirectory=/tmp/zookeeper

Restart=always

RestartSec=0s

ExecStart=/opt/zookeeper/bin/zkServer.sh start

ExecStop=/opt/zookeeper/bin/zkServer.sh stop

[Install]

WantedBy=multi-user.target

 - 시스템부팅 시 자동실행 설정

# 서비스 데몬 재시작

systemctl daemon-reload

# 주키퍼 실행 (종료는 stop, 재시작은 restart)

systemctl start zookeeper.service

# 실행상태 확인

systemctl status zookeeper.service

# 시스템 부팅할 때 자동실행 설정

systemctl enable zookeeper.service

 

● 카프카(KAFKA) 설치

 - 적당한 곳에 kafka를 다운로드 후, 압축 해제(/opt)

wget http://mirror.apache-kr.org/kafka/2.2.0/kafka_2.11-2.2.0.tgz

tar xvf kafka_2.11-2.2.0.tgz

ln –s kafka_2.11-2.2.0.tgz kafka

 - /opt/data 디렉토리 생성(카프카에 메시지가 저장되는 장소)

mkdir data

 - 카프카도 별도서버에 설치하면 /myid 파일을 만들고 그 안에 숫자를 넣으면 되는데 여기선 주키퍼랑 같이 쓰니까 로 사용

 - 카프카 설정 파일 수정

vi kafka/config/server.properties

############################# Server Basics ############################

#서버 /myid에 값으로 각각 세팅

broker.id=1

############################# Logs Basics #############################

## 카프카 메시지저장분산디렉토리

log.dirs=/opt/data

############################# Zookeeper #############################

## 주기퍼 연결설정

## 서버1호스트명:서버1포트,서버2호스트명:서버2포트,서버3호스트명:서버2포트/주기퍼노드명

zookeeper.connect=kafka1:2181,kafka2:2181,kafka3:2181/incon-kafka

 - zookeeper.connect 에서 마지막 /incon-kafka주기퍼 노드명이다. 작성하지 않으면 주기퍼 루트 노드에 저장된다. 그렇게 되면 관리하기가 어려우므로 이렇게 별도로 노드명을 기재

 카프카 실행

 - 실행 (실행 전에 주키퍼 먼저 실행)

bin/kafka-server-start.sh config/server.properties &

(& 를 붙일 시 백그라운드에서 실행)

 - 정상 START

....중략....

[KafkaServer id=1] started (kafka.server.KafkaServer)

* 주키퍼 및 카프카 실행확인 : jps

'* KAFKA > KAFKA 설치' 카테고리의 다른 글

KAFKA Manager 설치  (0) 2019.07.22
KAFKA 테스트  (0) 2019.07.22
KAFKA(카프카) & ZOOKEEPER(주키퍼)  (0) 2019.07.22

• 카프카란?

- 분산형 스트리밍 플랫폼(A distributed streaming platform)

- LinkedIn에서 여러 구직 및 채용 정보들을 한곳에서 처리(발행-구독) 할 수 있는 플랫폼으로 개발이 시작

 (발행/구독: publish-subscribe 은 메시지를 특정 수신자에게 직접적으로 보내주는 시스템이 아니고, 메시지를 받기를 원하는 사람이 해당 토픽(topic)을 구독함으로써 메시지를 읽어 올 수 있다.)

• 특징

- 대용량 실시간 로그처리에 특화되어 설계된 메시징 시스템으로 TPS가 매우 우수

- 메시지를 메모리에 저장하는 기존 메시징 시스템과는 달리 파일에 저장을 하는데 그로 인해 카프카를 재 시작해도 메시지 유실 우려가 감소

- 대용량처리에 특화 : 컨슈머(Consumer)가 브로커(Broker)로부터 메시지를 직접 가져가는 PULL방식으로 동작 > 컨슈머는 자신의 처리능력만큼의 메시지만 가져와 최적의 성능

- 확장성(scale-out)고가용성(high availability)을 위하여 broker들이 클러스터로 구성되어 동작하도록 설계되어있다. 심지어 broker1개 밖에 없을 때에도 클러스터로써 동작한다. 클러스터 내의 broker에 대한 분산 처리는 Apache ZooKeeper가 담당

 

참고 : http://kafka.apache.org/documentation/

출처 : https://team-platform.tistory.com/m/11

 

• 주키퍼?

- 주키퍼는(Zookeeper)는 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트입니다. 이러한 어플리케이션의 목적은 개발자가 코디네이션 로직보다는 비즈니스 핵심 로직에 집중하게끔 지원하는 역할


• 주키퍼 사용용도

 - 주키퍼는 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 주로 사용

 

  • 설정 관리(Configuration management) : 클러스터의 설정 정보를 최신으로 유지하기 위한 조율 시스템으로 사용됩니다.

  • 클러스터 관리(Cluster management) : 클러스터의 서버가 추가되거나 제외될 때 그 정보를 클러스터 안 서버들이 공유하는 데 사용됩니다.

  • 리더 채택(Leader selection) : 다중 어플리케이션 중에서 어떤 노드를 리더로 선출할 지를 정하는 로직을 만드는 데 사용됩니다. 주로 복제된 여러 노드 중 연산이 이루어지는 하나의 노드를 택하는 데 사용됩니다.

  • 락, 동기화 서비스(Locking and synchronization service) : 클러스터에 쓰기 연산이 빈번할 경우 경쟁상태에 들어갈 가능성이 커집니다. 이는 데이터 불일치를 발생시킵니다. 이 때, 클러스터 전체를 대상을 동기화해( 락을 검 ) 경쟁상태에 들어갈 경우를 사전에 방지합니다.


출처: https://engkimbs.tistory.com/660

'* KAFKA > KAFKA 설치' 카테고리의 다른 글

KAFKA Manager 설치  (0) 2019.07.22
KAFKA 테스트  (0) 2019.07.22
KAFKA 설치  (0) 2019.07.22

+ Recent posts