2. 강의 개요
1⃣ Kafka 소개, 설치 및 실행
2⃣ Kafka와 OpenCV를 사용한 Pi 카메라 영상 스트리밍
2
1⃣
2⃣
3⃣
4⃣
4⃣
3. Kafka를 소개하고, Kafka를 사용해 Raspberry Pi에서 터미널에 입력한 문자를 NUC에서 받아 볼 수 있도
록 합니다
강의 개요 (1) - Kafka 메시지 전송
3
1⃣
2⃣
3⃣
4⃣
4⃣
4. 강의 개요 (1) - Kafka 메시지 전송 with Python
4
Kafka와 Python을 사용해 Raspberry Pi에서 터미널에 입력한 문자를 NUC에서 받아 볼 수 있도록 합니다
5. Kafka를 사용해 Raspberry Pi Camera로부터의 영상을 NUC에서 받아 볼 수 있도록 합니다
강의 개요 (2) - Kafka 영상 전송 with Python
5
1⃣
2⃣
3⃣
4⃣
4⃣
6. 실험 목표
•여러 가지 애플리케이션, 프로세스 사이에 메시지를 전달하는 데에 쓰이는 Kafka를 알아봅니다
•Kafka의 특징과 사용되는 이유, 실제 예시를 이해합니다
•Kafka를 사용해 Pi로부터 NUC으로 콘솔창 입력을 보냅니다.
•Kafka의 Python 라이브러리를 살펴봅니다
•Kafka를 사용해 Pi의 카메라에서부터 NUC으로 영상을 전송합니다
•Kafka라는 도구는 메시징 시스템으로, 둘 사이의 메시지를 전송하는 역할을 해줍니다! 사용해
볼까요?
6
7. 7
Python 패키지 설치, 파일 다운로드, 코드 관리 도구
• pip은 Python으로 작성된 패키지
소프트웨어를 설치하고 삭제하는
패키지 관리 시스템입니다. PyPI
(Python Package Index)에서 패
키지들을 찾을 수 있습니다
• pip3 install로 Python3의 패키진
를 설치할 수 있습니다
• pip3 install -r [파일]: 파일에 쓰
여 있는 패키지를 설치합니다
• wget은 웹서버로부터 콘텐츠를 가
져오는 컴퓨터 프로그램입니다
• 파일의 url을 인자로 주어 해당 링
크의 파일을 다운로드 받을 수 있
습니다
• git은 소스코드를 효과적으로 관리
할 수 있게 해주는 소프트웨어입니
다. 버전 관리를 위해 사용됩니다
• Github은 저장된 소스 코드를 호
스팅해주는(보여주는) 웹사이트입
니다. 다양한 프로젝트 소스 코드
들을 확인할 수 있습니다
• git clone 명령어로 Github의 코
드를 가져올 수 있습니다.
9. Kafka 란?
9
•Kafka는 발행-구독(pub-sub) 모델의 메시징 시스템입니다
•발행-구독 모델이란, 여러 원천 애플리케이션/프로세스에서 생성되는 데이터(메시지/로그)들이 데이터를
소비할 애플리케이션/프로세스로 직접 연결되어 전달되는 대신, 해당 데이터를 분류에 맞게 발행(publish)
하고 그 분류 주제를 구독(subscribe)하고 있는 곳에서 받아가 사용하는 모델입니다
•애플리케이션이 복잡해질수록 더 많은 데이터가 오고 가야 하고, 이를 클러스터로 운영해 체계적이고 안전
하게 스트리밍할 수 있는 플랫폼으로 나온 것이 Kafka입니다
10. Kafka의 구조
10
참고 자료: https://medium.com/@umanking/카프카에-대해서-이야기-하기전에-먼저-data에-대해서-이야기해보자-d2e3ca2f3c2
- Broker: 클라이언트로부터의 요청을 처리하고, 데이터를 복제합니다
- ZooKeeper: Broker와 topic들, 사용자들 클러스터의 상태를 유지합니다
- Topics: 들어오는 메시지들을 분류합니다
- Producers: 메시지를 broker에 보냅니다
- Consumers: 메시지를 broker로부터 구독하고 소비합니다
11. •초당 1000개 이상의 메시지를 전송할 수 있는 처리량을 제
공합니다
•메시지를 처리하는 데 발생하는 지연 시간이 적습니다
•확장 하기 쉽습니다 (분산 클러스터에 특화되어 있습니다)
•메시지가 손실되지 않도록 관리해줍니다
•생산자-사용자 사이의 메시지 전달, 웹사이트 동작 확인, 데
이터 수집 및 모니터링, 스트리밍 데이터 처리, 시간 순 상
태 변경 기록, 커밋 로그 등의 기능이 있습니다
•Netflix, Uber 등 많은 대규모 서비스에서 실제로 Kafka가
사용되고 있습니다
Kafka의 특징
11
13. 필요한 패키지 설치
13
NUC의 터미널에서
설치해 주세요
Python3 라이브러리 설치 도구를 설치합니다
Kafka 실행을 위해 필요한 jdk를 설치합니다
Python에서 kafka를 실행할 수 있도록 해줍니다
Kafka를 설치합니다
14. 필요한 패키지 설치
14
SSH로 Pi 터미널
에 접속해 동일하게
설치해 주세요
Kafka 실행을 위해 필요한 jdk를 설치합니다
Python에서 kafka를 실행할 수 있도록 해줍니다
Kafka를 설치합니다
15. Kafka 실행 순서
15
•1. Zookeeper를 켭니다 (Kafka server)
•2. Server(broker)를 켜고 + Kafka topic을 만듭니다 (Kafka server)
•topic은 이벤트들의 분류입니다. 같은 종류=topic의 이벤트들을 함께 묶어서 관리하기 때문
에, 이벤트/메시지를 생성하기 전에 topic을 먼저 만들어야 합니다
•topic은 다시 partition이라는 일정 크기의 조각으로 나뉘어 여러 broker에 복제되어 저장됩
니다
•3. Producer와 Consumer를 켭니다 (Kafka의 Client). Producer는 이벤트를 생성하고,
Consumer는 이벤트를 받아오는 역할을 합니다
16. Kafka ZooKeeper 실행
16
NUC의 터미널에서
실행해 주세요
•Kafka의 ZooKeeper를 실행해 분산된 메시지
큐의 정보를 관리해줍니다.
•Kafka를 사용하려면 반드시 ZooKeeper를 실
행해야 합니다
17. 17
Kafka Server 실행 NUC의 터미널에서
실행해 주세요
•Kafka의 Server(broker)를 실행해 클라이언트
(producer, consumer)로부터의 발행, 구독, 정보 요청
을 처리하고, 데이터를 topic, partition으로 나누어 복
제하고 저장합니다
•server.properties에서는 broker의 주소를 수정해
NUC 외부 기기인 Pi에서도 접근이 가능하도록 합니다.
NUC IP
터미널에서 새로운 탭을 열어주세요
18. 18
Kafka server.properties 수정 이유 (참고)
•Kafka는 Server(broker)를 실행해 클라이언트
(producer, consumer)로부터의 발행, 구독, 정보 요
청을 처리하고, 데이터를 topic, partition으로 나누
어 복제하고 저장합니다. Bootstrap server는 각
topic에 맞는 broker들의 주소 목록을 갖고 있고, 클
라이언트와 broker를 연결해줍니다
•기본 설정을 사용하면 외부에서 bootstrap-server에
broker의 위치를 물어볼 때, localhost:9092 라는 응
답을 받습니다. Pi에서 NUC의 bootstrap-server
(NUC IP:9092로 입력했음)로 broker의 위치를 물어
보고, 응답받은 주소로 메시지를 전송합니다.
localhost라는 응답을 받으면 Pi의 localhost로 메시
징을 하게 되고, Pi localhost에는 Kafka broker가 없
기 때문에 오류가 납니다
•server.properties의 broker IP를 수정해 NUC 외부
기기인 Pi에서도 접근이 가능해집니다
수정하지 않으면 오류가 나는 이유
19. 19
NUC의 터미널에서
실행해 주세요
•--create로 새로운 topic을 생성함을 밝힙니다
•--topic으로 이름을 지정합니다
•--replication-factor는 메시지의 복제 갯수를,
partitions는 메시지를 몇 개의 broker로 쪼개어 저장
할 것인지를 지정합니다
•--list 옵션으로 만들어진 topic들의 목록을 확인할 수
있습니다
Kafka Topic 생성
•Kafka는 메시지를 topic에 따라 관리합니다. 메시지
를 발행하는 producer도 특정 topic에 대해 메시지
를 발행하고, consumer도 특정 topic을 지정해 그
topic에 대한 메시지들을 구독합니다.
•Topic은 partition으로 나뉘어 broker들에 분산, 복
제되어 저장됩니다
터미널에서 새로운 탭을 열어주세요
NUC IP
NUC IP
20. 20
Pi 콘솔창 입력 메시지 발행, NUC 구독
•"chat" 이라는 topic으로 Pi가 메시지를 발행합니다.
kafka-console-producer.sh 라는 쉘 스크립트를 실행해
Pi의 콘솔(터미널)에 입력한 메시지가 Kafka에 발행되도
록 합니다
•NUC에서 "chat"이라는 topic을 구독하도록 해 Pi가 발행
하는 메시지를 받을 수 있습니다
NUC의 터미널에서
실행해 주세요
NUC IP
SSH로 Pi 터미널
에 접속해 실행해 주
세요
NUC IP
22. Python이란?
•Python은 간결한 코드와 쉬운 문법으로 사람이 읽기 좋게 쓰인 프로그래밍 언어입니다
•인터프리터 언어로 코드를 한 줄씩 실행하고
•다른 언어와 쉽게 통합할 수 있으며
•많은 라이브러리를 갖고 있다는 특징이 있습니다.
•라이브러리는 코드를 작성할 필요 없이 동작을 수행할 수 있게 해주는 변수, 함수, 메소드를 모
아둔 것입니다. 우리가 수행하고자 하는 동작을 처음부터 코드로 작성할 필요 없이, 사전에 정의
된 것을 가져다 쓸 수 있습니다.
•pip, conda 등의 도구로 원하는 라이브러리를 설치할 수 있습니다
•import를 사용해 라이브러리를 불러와 사용할 수 있습니다
22
23. 23
SSH로 Pi 터미널
에 접속해 실행해 주
세요
Pi, NUC에서 서버 주소 전역 환경변수 설정
bashrc 파일을 편집해 환경변수 SERVER_IP에 NUC의 IP 주소를 저장합니다
source를 통해 추가된 환경 변수를 적용합니다
NUC의 터미널에서
실행해 주세요
마지막 줄에 아래와 같이 추가합니다
NUC IP
마지막 줄에 아래와 같이 추가합니다
NUC IP
* 환경변수란, 셸 세션과 작업 환경에 대한 정보를 저장하는 변수입니다. 메모리에 데이터를 저장할 수
있으므로 쉘에서 실행중인 모든 프로그램이나 스크립트가 이 변수에 접근할 수 있습니다. 모든
bash 세션을 시작할 때 설정되는 전역 변수와, 해당 세션 안에서만 정의된 지역 변수가 있습니다
24. 24
Python Kafka Producer
~/
.bashrc
'G' 입력으로 맨 마지막줄로 이동, 아래와 같이 입력해 환경변수 등록
NUC IP
SSH로 Pi 터미널에
접속해 실행하세요
kafka_transmission/console_producer.py
4⃣ ctrl + C 를 눌러 종료하기 전까지, 입력값을 받아
Kafka 메시지로 발행합니다
1⃣ 필요한 라이브러리를 불러옵니다.
* kafka는 앞서 pip3로 설치한 kafka-python
3⃣ Kafka producer를 정의합니다
2⃣ 환경변수에 저장된 Broker 서버 IP 주소를 가져옵니다
2⃣ python 실행시 topic을 인자로 받습니다.
ex) python3 console_consumer.py --topic 'my_topic'
25. 25
Python Kafka Consumer NUC의 터미널에서
실행해 주세요
~/.bashrc 의 SERVER_IP에 NUC의 IP 값을 적어 넣습니다
1⃣ 필요한 라이브러리를 불러옵니다.* kafka는 앞서 pip3로
설치한 kafka-python
2⃣ 환경변수에 저장된 Broker 서버 IP 주소를 가져옵니다
3⃣ Kafka consumer를 정의합니다
4⃣ Broker에서 메시지를 받아오고 출력합니다
2⃣ python 실행시 topic을 인자로 받습니다.
ex) python3 console_consumer.py --topic 'my_topic'
kafka_transmission/console_consumer.py
NUC IP
26. Pi -> NUC
카메라 영상 전송
Pi에서 NUC으로 카메라 영상을 전
송합니다.Kafka, kafka-python,
opencv를 사용합니다.
26
27. 27
Kafka setup NUC의 터미널에서
실행해 주세요
•Kafka Zookeeper가 켜져 있는지 확인합니다
•Kafka Broker(Server)가 켜져 있는지 확인합니다
•켜져 있지 않다면 Kafka ZooKeeper 실행, Kafka Server 실행 페이지를 보고 다시 실행합니다.
•비디오 송수신을 위해 새로운 "pi-video" 라는 새로운 Kafka topic을 생성합니다
NUC IP
NUC IP
NUC IP
28. 28
Python Kafka Producer SSH로 Pi 터미널에
접속해 실행하세요
kafka_transmission/video_producer.py
4⃣ ctrl + C 를 눌러 종료하기 전까지, 입력값을 받아
Kafka 메시지로 발행합니다
1⃣ 필요한 라이브러리를 불러옵니다.
* kafka는 앞서 pip3로 설치한 kafka-python
3⃣ Kafka producer를 정의합니다
2⃣ 환경변수에 저장된 Broker 서버 IP 주소를 가져옵니다
2⃣ python 실행시 topic을 인자로 받습니다.
ex) python3 console_consumer.py --topic 'my_topic'
- Raspberry Pi는 비디오 프레임을 발행하는 producer
입니다
- AI_X_SUMMER_2021/kafka_transmission 디렉토
리로 가세요 (이미 그 위치라면 이동 필요 없음)
- video_producer.py 파일을 실행하세요
29. - NUC 은 video frame을 소비합니다
- AI_X_SUMMER_2021/kafka_transmission 디
렉토리로 가세요 (이미 그 위치라면 이동 필요 없
음)
- video_consumer.py 파일을 실행하세요
29
Python Kafka Consumer NUC의 터미널에서
실행해 주세요
kafka_transmission/video_consumer.py
1⃣ 필요한 라이브러리를 불러옵니다.* kafka는 앞서 pip3로
설치한 kafka-python
2⃣ 환경변수에 저장된 Broker 서버 IP 주소를 가져옵니다
3⃣ Kafka consumer를 정의합니다
4⃣ Broker에서 메시지를 받아오고 출력합니다
2⃣ python 실행시 topic을 인자로 받습니다.
ex) python3 console_consumer.py --topic 'my_topic'