2 분 소요

개요

Kafka 사용 이전

스크린샷 2022-10-08 오후 10 53 13

  • End-to-End 연결 방식의 아키텍처
  • 데이터 연동의 복잡성 증가 (HW, 운영체제, 장애 등)
  • 서로 다른 데이터 Pipeline 연결 구조
  • 확장이 어려운 구조

Kafka의 도입

스크린샷 2022-10-08 오후 10 55 25

Apache Kafka를 사용함으로써 메시지를 보내는 쪽(Producer)은 누가 받는 지에 대해 신경쓰지 않고,
메시지를 받는 쪽(Consumer)은 누가 보냈는 지에 대해 전혀 신경쓰지 않고 메시지를 주고 받을 수 있다.

  • Producer/Consumer 분리
  • 메시지를 여러 Consumer에게 허용
  • 높은 처리량을 위한 메시지 최적화
  • Scale-out 가능 (Kafka가 clustering 구조이기 때문)
  • Eco-system

Kafka Broker

  • 실행된 Kafka 애플리케이션 서버
  • 3대 이상의 Broker Cluster 구성
  • Zookeeper 연동
    - 역할: 메타데이터 (Broker ID, Controller ID 등) 저장
    - Controller 정보 저장
    스크린샷 2022-10-08 오후 11 00 29
  • n개 Broker 중 1대는 Controller 기능 수행

Controller의 역할?

  • 각 Broker에게 담당 파티션 할당 수행
  • Broker 정상 동작 모니터링 관리

Apache Kafka 설치

Kafka 홈페이지
http://kafka.apache.org

나는 아래 버전을 다운했다. (Windows와 MacOS 상관없이 다운 받아도 된다고 한다.)
스크린샷 2022-10-09 오전 1 59 54
압축 파일을 다운 받은 후, 원하는 곳으로 옮겨 압축을 해제하면 아래와 같은 디렉토리들을 확인할 수 있다.
스크린샷 2022-10-08 오후 11 31 28

설정

압축을 푼 폴더에 가서 /config/server.properties 파일을 vim혹은 vscode로 연다.

$ cd config
$ code server.properties # 설정 변경

그리고 listenres, advertised-listener, listenr.security 부분을 활성화 시켜주고 아래와 같이 설정한다.
스크린샷 2022-10-09 오전 12 55 08
참고로 아래 첫 번째 블로그에서는 vi ~/.zshrc 커맨드로 환경변수도 추가했는데, 나는 하지 않았다.

참고

Apache Kafka 사용

Ecosystem - 1. Kafka Client

Kafka 서버 구동 및 Topic 생성

압축 푼 폴더로 이동 후 아래 커맨드를 실행한다.
zookeeper 서버를 먼저 구동한 뒤에 kafka 서버를 구동하고, 새로운 topic을 생성해보자.

# Zookeeper 서버 구동
$ ./bin/zookeeper-server-start.sh ./config/zookeeper.properties

# Kafka 서버 구동
$ ./bin/kafka-server-start.sh ./config/server.properties
# Topic 생성
$ ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create -topic quickstart-events --partitions 1

# Topic 목록 확인
$ ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

# Topic 정보 확인
$ ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic quickstart-events

quickstart-events라는 이름으로 토픽을 생성한 뒤, 이를 확인해보자.
스크린샷 2022-10-09 오전 1 09 32

kafka는 producer 쪽에서 메시지를 보내면, 그 메시지는 Topic 이라는 곳에 저장된다.
해당 Topic을 구독한 consumer는 Topic에 새로운 메시지가 들어올 때, 일괄적으로 전달받을 수 있다.
따라서, 보내는 쪽(producer)과 받는 쪽(consumer)은 상대가 누구인지 신경쓰지 않고, Topic을 상대로 한다.

메시지 생산 및 소비

압축 푼 폴더로 이동 후 아래 커맨드를 실행한다.

# 메시지 생산(produce)
$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic quickstart-events

# 메시지 소비(consume)
$ ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic quickstart-events --from-beginning

--from-beginning은 모든 메시지를 처음부터 얻어오겠다는 의미이다.

두 개의 콘솔로 테스트해보자.
스크린샷 2022-10-09 오전 1 16 38
producer가 메시지를 전달하면, consumer 쪽에서 바로바로 받아오는 것을 확인할 수 있다.

이번에는 하나의 콘솔창을 추가로 열어서,
이전과 같이 ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic quickstart-events --from-beginning 커맨드로 두 번째 consumer를 등록해보자.
스크린샷 2022-10-09 오전 1 47 21
맨 아래에 보이는게 두 번째로 만든 consumer인데, --from-beginning 옵션 때문에 처음 메시지부터 가져오는 것을 확인할 수 있다.
그리고 producer가 hello second consumer라는 메시지를 토픽에 전달하니, 두 개의 consumer에서 동시에 받아오는 것을 확인할 수 있다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기