본문 바로가기

공부

Kafka

Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼입니다. 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었습니다. 

Kafka는 복잡한 라우팅에 의존하지 않고 최대 처리량으로 스트리밍하는 데 가장 적합합니다.

이벤트 소싱, 스트림 처리 및 일련의 이벤트로 시스템에 대한 모델링 변경을 수행하는 데 이상적입니다.

Kafka는 다단계 파이프라인에서 데이터를 처리하는 데도 적합합니다.

kafka 키워드 요약 : 실시간 처리, 분산 이벤트 스트리밍 플랫폼, 고성능 강조

 

Kafka의 장점

  1. Pub/Sub 모델 : Publishe/Subscriber 모델은 데이터 큐를 중간에 두고 서로 간 독립적으로 데이터를 생산하고 소비하는 모델. 이런 느슨한 결합을 통해 Publisher나 Subscriber가 변경이나 장애시에도 서로 간에 의존성이 없으므로 안정적인 데이터 처리 가능.
  2. → producer- Kafka - consumer
  3. 고가용성(High availability) 및 확장성(Scalability) : 카프카는 클러스터로서 작동함. 클러스터로서 작동하므로 Fault-tolerant 한 고가용성 서비스를 제공할 수 있고 분산 처리를 통해 빠른 데이터 처리를 가능하게 합니다. 또한 서버를 수평적으로 늘려 안정성 및 성능을 향상시키는 Scale-out이 가능
  4. 디스크 순차 저장 및 처리(Sequential Store and Process in Disk) : 메세지를 메모리 큐에 적재하는 기존 메세지 시스템과 다르게 카프카는 메세지를 디스크에 순차적으로 저장
  5. 서버에 장애가 나도 메세지가 디스크에 저장되어 있으므로 유실걱정이 상대적으로 적음
  6. 디스크가 순차적으로 저장되어 있으므로 디스크 I/O가 줄어들어 성능이 향상됨
  7. 분산 처리(Distributed Processing) : 카프카는 파티션(Partition)이란 개념을 도입하여 여러 개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있음. 이로서 메세지를 상황에 맞추어 빠르게 처리할 수 있음

Kafka의 단점

  1. 복잡한 운영: Kafka는 운영 및 구성이 다소 복잡할 수 있습니다. 특히 클러스터 구성 및 토픽 관리 등에 신경을 써야 합니다.
  2. 기능의 복잡성: 초기에는 Kafka의 다양한 기능과 용어에 대한 이해가 필요할 수 있습니다.
  3. 메모리 사용량: 메모리 사용량이 큰 편이어서 메모리 부족으로 인한 성능 저하가 발생할 수 있습니다.
  4. 적절한 설정 필요: 적절한 설정이 필요하며, 특히 프로듀서 및 컨슈머의 세밀한 조정이 필요할 수 있습니다.
  5. 기본 브로커가 3개 이상 필요하므로 서버 비용이 든다.
  6. 메시지가 수정이 필요하다면 카프카의 성능이 급격히 감소한다.

 

 

Kafka의 구조

                         

                        Zookeeper Cluster

 

producer ->     kafka cluster                  <- consumer

                        broker broker broker

 

Zookepper

  • 클러스터를 관리하는 Zookeeper 없이는 Kafka 구동이 불가능합니다.대체 컨트롤러로 kraft가 있다.
  • 새로운 토픽 생성/삭제, 브로커 추가/제거 등 카프카 클러스트를 관리 하는 역할
  • 즉, Kafka 서버를 가동하려면 Zookeeper를 먼저 가동해줘야 합니다.( 그래서 Kafka 다운로드시 Zookeeper도 함께 제공해줍니다.)
  • Broker에 분산 처리된 메시지 큐의 정보들을 관리한다.

Kafka Broker

  • 실행된 Kafka 어플리케이션 서버
  • 일반적으로 3대이상의 Broker를 Broker Cluster로 구성하는 것을 권장한다. 서버중 1대는 리더 역할을 한다.
  • 한곳에 저장되었던 메시지들을 다른곳에 공유함으로써 하나의 Broker가 문제가 생겼을때 다른 Broker를 사용
  • 서버의 상태, 서버의 문제 장애 체크, 복구 등을 위해 코디네이터 시스템을 연동해서 같이 사용하는데 Kafka에서는 Zookeper를 일반적으로 사용한다.

Producer - Message를 발행하는 주체

Consumer - Broker를 통해 받은 Message를 처리하는 주체

 

Apache Hadoop 은 빅 데이터 분석, 기계 학습, 데이터 마이닝 및 정형 및 비정형 데이터를 처리하는 기타 데이터 기반 애플리케이션에 사용하기 위해 컴퓨터 클러스터에 대량의 데이터를 저장할 수 있는 분산 소프트웨어 프레임워크입니다. Kafka는 Hadoop 클러스터에 대한 실시간 스트리밍 데이터 파이프라인을 생성하는 데 자주 사용됩니다.

 

프로젝트를 진행하면서 참고한 블로그

local

https://victorydntmd.tistory.com/347(docker kafka local )

spring kafka

https://tmdrl5779.tistory.com/190 (spring kafka local)

server(aws kafka 적용)

단일 노드

https://hardenkim.tistory.com/66

https://www.youtube.com/watch?v=ozxVgaqGNhM&list=PL3Re5Ri5rZmksx3uuv7gU7Mg6fm69y7wh&index=3

https://github.com/AndersonChoi/tacademy-kafka/blob/master/실습 커맨드 리스트.txt

tar xvf {kafka 압축 파일}

cluster 의 개수 = broker 개수

a → backspace (vi file 주석 해제)

멀티 노드

https://blog.voidmainvoid.net/325

https://www.youtube.com/watch?v=Qr0HVvtMFhg

 

'공부' 카테고리의 다른 글

ElasticSearch index 설정  (0) 2023.12.07
ElasticSearch  (1) 2023.12.07
알고리즘 7일차  (0) 2023.07.31
알고리즘 6일차  (0) 2023.07.30
알고리즘 5일차  (0) 2023.07.29