Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼입니다. 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었습니다.
Kafka는 복잡한 라우팅에 의존하지 않고 최대 처리량으로 스트리밍하는 데 가장 적합합니다.
이벤트 소싱, 스트림 처리 및 일련의 이벤트로 시스템에 대한 모델링 변경을 수행하는 데 이상적입니다.
Kafka는 다단계 파이프라인에서 데이터를 처리하는 데도 적합합니다.
kafka 키워드 요약 : 실시간 처리, 분산 이벤트 스트리밍 플랫폼, 고성능 강조
Kafka의 장점
- Pub/Sub 모델 : Publishe/Subscriber 모델은 데이터 큐를 중간에 두고 서로 간 독립적으로 데이터를 생산하고 소비하는 모델. 이런 느슨한 결합을 통해 Publisher나 Subscriber가 변경이나 장애시에도 서로 간에 의존성이 없으므로 안정적인 데이터 처리 가능.
- → producer- Kafka - consumer
- 고가용성(High availability) 및 확장성(Scalability) : 카프카는 클러스터로서 작동함. 클러스터로서 작동하므로 Fault-tolerant 한 고가용성 서비스를 제공할 수 있고 분산 처리를 통해 빠른 데이터 처리를 가능하게 합니다. 또한 서버를 수평적으로 늘려 안정성 및 성능을 향상시키는 Scale-out이 가능
- 디스크 순차 저장 및 처리(Sequential Store and Process in Disk) : 메세지를 메모리 큐에 적재하는 기존 메세지 시스템과 다르게 카프카는 메세지를 디스크에 순차적으로 저장
- 서버에 장애가 나도 메세지가 디스크에 저장되어 있으므로 유실걱정이 상대적으로 적음
- 디스크가 순차적으로 저장되어 있으므로 디스크 I/O가 줄어들어 성능이 향상됨
- 분산 처리(Distributed Processing) : 카프카는 파티션(Partition)이란 개념을 도입하여 여러 개의 파티션을 서버들에 분산시켜 나누어 처리할 수 있음. 이로서 메세지를 상황에 맞추어 빠르게 처리할 수 있음
Kafka의 단점
- 복잡한 운영: Kafka는 운영 및 구성이 다소 복잡할 수 있습니다. 특히 클러스터 구성 및 토픽 관리 등에 신경을 써야 합니다.
- 기능의 복잡성: 초기에는 Kafka의 다양한 기능과 용어에 대한 이해가 필요할 수 있습니다.
- 메모리 사용량: 메모리 사용량이 큰 편이어서 메모리 부족으로 인한 성능 저하가 발생할 수 있습니다.
- 적절한 설정 필요: 적절한 설정이 필요하며, 특히 프로듀서 및 컨슈머의 세밀한 조정이 필요할 수 있습니다.
- 기본 브로커가 3개 이상 필요하므로 서버 비용이 든다.
- 메시지가 수정이 필요하다면 카프카의 성능이 급격히 감소한다.
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 |