1. vmware 에서 가상머신에 centos를 설치한다.
   hostname을 zk001로 한다.
   
   ** 호스트 네임 변경방법
   "/etc/sysconfig/network" 파일을 수정후 재부팅한다.
   
   NETWORKING=yes
   HOSTNAME=zk001
   
2. root로 openjdk 1.8.0을 설치한다.
   $> yum -y install java-1.8.0-openjdk
3. iptables 서비스를 종료한다.
   $> service iptables stop
4. 서비스 자동시작을 해제한다.
   $> chkconfig iptables off   
   
5. 위의 가상머신을 clone 기능을 이용해 복제 하고
   hostname을 kafka001로 한다. 

   ** 호스트 네임 변경방법
   "/etc/sysconfig/network" 파일을 수정후 재부팅한다.
   
   NETWORKING=yes
   HOSTNAME=kafka001
   
6. zk001서버에 주키퍼를 설치한다.
    $>cd /usr/local/
    $>wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz
    - 압축을 해제한다.
$>tar xvfz apache-zookeeper-3.5.5-bin.tar.gz
- 소프트 링크를 생성한다.
$>ln -s apache-zookeeper-3.5.5-bin zookeeper
$>mkdir /data

7. zk001를 clone 기능을 이용하여 2대 복제하고 hostname을 zk002, zk003으로 수정한다.
   zk001 서버에서 /data/myid에 1을 입력한다.
   $> echo 1 > /data/myid
   zk002 서버에서 /data/myid에 2을 입력한다.
   $> echo 2 > /data/myid
   zk003 서버에서 /data/myid에 3을 입력한다. 
   $> echo 3 > /data/myid
   
8. zk001, zk002, zk003 서버에서 환경설정파일을 생성한다.
$> cd /usr/local/zookeeper/conf
$> vi zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
clientPort=2181
server.1=zk001:2888:3888
server.2=zk002:2888:3888
server.3=zk003:2888:388

9. zk001, zk002, zk003  서버에서 주키퍼가 정상적으로 수행되는지 확인한다.
   $> cd /usr/local/zookeeper/bin/
   $> ./zkServer.sh start
   
   아래 명령어로 daemon이 떠있는지 확인한다.
   $>ps -ef | grep zookeeper
   
10. 5번 step에서 복제한 kafka001에 kafka를 설치한다.
    $> cd /usr/local/  
    $> wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
    $> tar xvfz kafka_2.11-2.1.0.tgz
    $> ln -s kafka_2.11-2.1.0 kafka
$> mkdir /data1
$> mkdir /data2

11. kafka001 서버를 2대 복제하고 hostname을 kafka002, kafka003으로 변경한다.
    각서버에서 주키퍼 서버로 접속이 되는지 확인한다.
$> nc -v zk001 2181
Connection to zk001 2181 port [tcp/eforward] succeeded!

12. 각서버에서 환경설정 파일을 변경한다.
    $> cd /usr/local/kafka/config/
vi 에디터로 아래 파일을 수정한다.
$> vi server.properties
  아래 부분을 찾아서 서버에 맞게 수정해 준다.
  ############################# Server Basics #############################
      # The id of the broker. This must be set to a unique integer for each broker.
      broker.id=1

  kafka001은 1로 수정
  kafka002는 2로 수정 
  kafka003은 3으로 수정
  
13. log 디렉토리 설정 수정
    아래 부분을 찾아서 각 서버에서 동일하게 수정을 한다.
log.dirs=/data1,/data2  
    
14. zookeeper.connect부분을 찾아서 아래와 같이 모든 서버에서 수정해줍니다.
    아래와 같이 입력하면 kafka가 주키퍼에 접속하여 /kafka라는 znode를 생성합니다.

    zookeeper.connect=zk001:2181,zk002:2181,zk003:2181/kafka

15. 각 서버에서 카프카를 시작한다 이때 & 기호를 붙여서 백그라운드에서 실행이 되도록 합니다.

   ./kafka-server-start.sh /usr/local/kafka/config/server.properties &

16. 주키퍼와 카프카의 상태확인
    zk001,zk002,zk003 서버에서 주키퍼 클라이언트 포트의 상태를 확인합니다.

$> ps -ef | grep 2181
root     12758  2653  0 23:09 pts/0    00:00:00 grep 2181

kafka001,kafka002,kafka003 서버에서 kafka 포트의 상태를 확인합니다.

$> ps -ef | grep 9092
root      9126  2459  0 23:09 pts/0    00:00:00 grep 9092

17. 주키퍼와 cli를 통해 주키퍼와 카프카가 잘연결 되었는지 확인
    $> cd /usr/local/zookeeper/bin
    $> ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
    [kafka, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /kafka/brokers/ids
    [1,2,3]


18. 카프카 토픽 생성
$>  cd /usr/local/kafka/bin/
$> ./kafka-topics.sh \
--zookeeper zk001:2181,zk002:2181,zk003:2181/kafka \
--replication-factor 1 --partitions 1 --topic kang-topic --create

   - 참고로 토픽을 잘못 생성한 경우는 아래와 같이 삭제를 한다.
$> ./kafka-topics.sh \
--zookeeper zk001:2181,zk002:2181,zk003:2181/kafka \
--topic kang-topic --create

19. 카프카 메세지 퍼블리싱
    아래 명령어를 수행하면 메세지를 입력할 수 있는 프롬프트가 뜹니다.
    $> cd /usr/local/kafka/bin/ 
$> ./kafka-console-producer.sh \
   --broker-list kafka001:9092,kafka002:9092,kafka003:9092 \
   --topic kang-topic
   
프롬프트에 아래와 같이 입력합니다.
>first message
>second message

메세지 입력후 ctrl+c를 입력하면 입력창에서 나올 수 있습니다.

20. 카프카 메세지 수신
    아래와 같이 입력하면 kang-topic에 퍼블리싱된 메세지를 아래와 같이 확인할 수 있다.
$>./kafka-console-consumer.sh \
  --bootstrap-server kafka001:9092,kafka002:9092,kafka003:9092 \
  --topic kang-topic --from-beginning

    first message
    second message

by pacino.kang 2019. 6. 4. 15:32
| 1 |