본 내용은 인프런의 이도원님의 SpringCloud 강의를 참고하여 작성되었습니다.
Apache Kafka는 대규모 데이터 스트림 처리를 위한 분산 스트리밍 플랫폼으로 LinkedIn에서 개발되었으며 현재 Apache 소프트웨어 재단의 프로젝트로 유지보수되고 있다.
Kafka는 고성능 메시징 시스템 및 데이터 스트리밍 플랫폼으로 널리 사용되며, 실시간 데이터 흐름을 처리하고 저장하는 데 사용된다!
대용량 데이터 스트림 처리, 이벤트 기반 마이크로서비스 아키텍처, 로깅, 분석, 메시징 및 기타 실시간 데이터 처리 작업을 지원하며 이벤트 기반 마이크로서비스 아키텍처에서 활용하는 방법에 대해 알아보자.
[Producer] → [Kafka Connect Source] → [Topic] → [Kafka Connect Sink] → [Consumer]
Producer
Producer는 등록된 Topic에 message(작업)를 등록할 수 있다.
Topic
Topic의 종류에 따라 관련된 message들을 보관한다.
Consumer
Consumer는 Topic에 Subscribe(구독)을 통해 관심사 등록을 할 수 있다. Topic을 확인하며 Consumer는 message를 받아온다.
Producer와 Consumer는 받고 주는 사람이 누구인지 상관없이 Topic에만 작업을 처리하면 된다! (비동기 방식으로 작동)
다양한 리소스로부터 특정 시스템에 데이터를 저장하는 경우, End-to-End 연결 방식의 아키텍처는 데이터 연동의 복잡성이 증가한다(서로 호환이 되지 않음). 이는 확장이 어려운 구조가 된다.
Kafka라는 메시지 브로커(중개자)를 사용한다면, 모든 시스템으로 데이터를 실시간으로 처리하고 확장이 용이해진다.
각각의 시스템은 저장되는 형식에 종속되지 않고, 누가 데이터를 주고 받는지 신경쓸 필요가 없어진다. (Kafka가 중개하기 때문에)
이 뿐만아니라 클러스터링 구조를 지원하고, 데이터 스트리밍 등을 지원한다.
Kafka는 3대 이상의 Broker Cluster를 구성하는 것을 권장한다고 한다!
클러스터링을 관리하기 위해 Zookeeper 라는 시스템을 사용해야 한다. 각각의 Broker에 역활을 담당하는 leader Controller를 선출하고, 문제가 생긴다면 다른 Broker를 승격시키는 등 관리하는 역활을 Zookeeper가 담당한다.
먼저! Kafka 클러스터링과 관리를 위해 Zookeeper를 먼저 구동 후, Kafka 서버를 구동해야한다.
$KAFKA_HOME/bin/zookeeper-server-start.sh
$KAFKA_HOME/config/zookeeper.properties
$KAFKA_HOME/bin/kafka-server-start.sh
$KAFKA_HOME/config/server.properties
다음으로! Topic을 생성해보자.
Producer에서 메시지를 보내게되면, 이는 Consumer로 바로 전달되는 것이 아니라 지정된 Topic에 저장이 된다. Consumer는 관심 Topic에 전달된 메시지를 가져오게 된다.
$KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic quickstart-events --partitions1
--create --topic quickstart-events : 토픽 생성
--bootstrap-server localhost:9092 : 포트 지정
--partitions1 : 멀티 클러스러링 환경에서 메시지를 파티셔닝
생성한 Topic의 목록 확인
$KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
Topic 정보 확인
$KAFKA_HOME/bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
--bootstrap-server : Kafka 브로커 위치 지정
--describe : 상세한 Topic의 정보 확인 가능
메시지의 생산/소비
// 생선
$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list
localhost:9092 --topic quickstart-events
// 소비
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic quickstart-events --from-beginning
참고문헌
Inflearn: Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의자료