카프카 설치 및 기본 컴포넌트 동작 실습

2022-01-16

.

Data_Engineering_TIL(20220115)

[참고자료]

패스트캠퍼스 “Kafka 완전 정복, 클러스터 구축부터 MSA 환경 활용까지” 강의내용

URL : https://fastcampus.co.kr/dev_online_kafka

[학습내용]

  • 실습목표 : 자바와 카프카를 설치하고 간단하게 주키퍼서버를 띄우고, 토픽을 생성하고, 프로듀서&컨슈머로 데이터를 생성해서 수집을 해본다.
# 자바 다운로드 및 설치
[ec2-user@ip-10-10-1-28 ~]$ sudo yum install java-1.8.0-openjdk.x86_64 -y

[ec2-user@ip-10-10-1-28 ~]$ sudo yum list | grep jdk
...

java-1.8.0-openjdk.x86_64              1:1.8.0.312.b07-1.amzn2.0.2    amzn2-core

...

[ec2-user@ip-10-10-1-28 ~]$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

[ec2-user@ip-10-10-1-28 ~]$ sudo yum install java-1.8.0-openjdk-devel.x86_64 -y

[ec2-user@ip-10-10-1-28 ~]$ javac -version
javac 1.8.0_312

[ec2-user@ip-10-10-1-28 ~]$ which java
/usr/bin/java

[ec2-user@ip-10-10-1-28 ~]$ readlink -f /usr/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.amzn2.0.2.x86_64/jre/bin/java

[ec2-user@ip-10-10-1-28 ~]$ sudo vim /etc/profile
# 스크립트 가장 하단에 아래에 문구들을 추가
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOHE/bin
export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

[ec2-user@ip-10-10-1-28 ~]$ source /etc/profile

[ec2-user@ip-10-10-1-28 ~]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk

# 카프카 다운로드 및 설치
[ec2-user@ip-10-10-1-28 ~]$ wget https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.tgz
--2022-01-15 13:30:01--  https://archive.apache.org/dist/kafka/2.8.1/kafka_2.13-2.8.1.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|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 71438574 (68M) [application/x-gzip]
Saving to: ‘kafka_2.13-2.8.1.tgz’

100%[=========================================================>] 71,438,574  10.1MB/s   in 11s

2022-01-15 13:30:13 (6.43 MB/s) - ‘kafka_2.13-2.8.1.tgz’ saved [71438574/71438574]

[ec2-user@ip-10-10-1-28 ~]$ ls
kafka_2.13-2.8.1.tgz

[ec2-user@ip-10-10-1-28 ~]$ tar xvfz kafka_2.13-2.8.1.tgz

...

# 심볼릭 링크로 바로가기 폴더 만들기
[ec2-user@ip-10-10-1-28 ~]$ ln -s kafka_2.13-2.8.1 kafka

[ec2-user@ip-10-10-1-28 ~]$ ls
kafka  kafka_2.13-2.8.1  kafka_2.13-2.8.1.tgz

[ec2-user@ip-10-10-1-28 ~]$ cd kafka

[ec2-user@ip-10-10-1-28 kafka]$ ls
LICENSE  NOTICE  bin  config  libs  licenses  site-docs

# 주키퍼 서버 실행
[ec2-user@ip-10-10-1-28 kafka]$ bin/zookeeper-server-start.sh config/zookeeper.properties

...

# 새로 ec2 터미널 창을 하나 띄우고 거기에서 명령 실행
[ec2-user@ip-10-10-1-28 ~]$ sudo yum install telnet -y

# 텔넷 명령어로 주키퍼 서버의 포트 2181로 접근시도
[ec2-user@ip-10-10-1-28 ~]$ telnet 0 2181
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
^CConnection closed by foreign host.

[ec2-user@ip-10-10-1-28 ~]$ cd /home/ec2-user/kafka/bin

# 주키퍼 쉘 실행해보기
[ec2-user@ip-10-10-1-28 bin]$ ./zookeeper-shell.sh localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
# ls / 명령어 입력후 엔터를 치면 [zookeeper] 확인가능
ls /
[zookeeper]

^C

[ec2-user@ip-10-10-1-28 bin]$ cd /home/ec2-user/kafka

[ec2-user@ip-10-10-1-28 kafka]$ sudo vim config/server.properties
수정전 : #listeners=PLAINTEXT://:9092
수정후 : listeners=PLAINTEXT://127.0.0.1:9092

[ec2-user@ip-10-10-1-28 kafka]$ bin/kafka-server-start.sh config/server.properties

# 새로 ec2 터미널 창을 하나 띄우고 거기에서 명령 실행
[ec2-user@ip-10-10-1-28 ~]$ cd /home/ec2-user/kafka/bin

# 토픽생성
# 토픽생성시 언더바나 쩜으로 이름을 생성하지 않도록 한다.
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-topics.sh --create --topic minman --bootstrap-server localhost:9092
Created topic minman.

# 토픽 리스트 확인
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-topics.sh --list --bootstrap-server localhost:9092
minman

# 프로듀서 실행
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic minman
>

# 새로 ec2 터미널 창을 하나 띄우고 거기에서 명령 실행
[ec2-user@ip-10-10-1-28 ~]$ cd /home/ec2-user/kafka/bin

[ec2-user@ip-10-10-1-28 bin]$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic minman


# 위에서 실행한 프로듀서에 아래와 같이 입력한다.
# 프로듀서 실행
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic minman
>hello
>minman2
>minman
>1
>2
>3
>4
>5
>night
>sleep

# 그러면 아래와 같이 위에서 띄운 컨슈머 터미널에도 아래와 같이 전시가된다.
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic minman
minman
1
2
3
4
5
night
sleep

^CProcessed a total of 8 messages

# 아래 명령어와 같이 --from-beginning 옵션을 주고 다시 실행하면 프로듀서가 처음 만든 데이터부터 보이게 된다.
[ec2-user@ip-10-10-1-28 bin]$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic minman --from-beginning
hello
minman2
minman
1
2
3
4
5
night
sleep

^CProcessed a total of 11 messages

# 주키퍼 쉘로 들어가서 확인해보니 카프카 브로커가 생성되면서 생긴 설정 파일들을 확인할 수 있다.
[ec2-user@ip-10-10-1-28 bin]$ ./zookeeper-shell.sh localhost:2181
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is disabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
ls /
[admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper]
ls /brokers
[ids, seqid, topics]
ls /brokers/ids
[0]
# 아까 카프카 기본설정할때 카프카 브로커 아이디가 기본설정으로 0으로 되어 있어서 그렇다.
ls /brokers/topics
[__consumer_offsets, minman]