- 기존 스트리밍 프로세싱을 하려면 아래 그림과 같이 시스템을 더할수록 복잡해지는 문제가 있었다. 여기서는 여러가지 통신 프로토콜(HTTP, TCP, gRPC, MQ 등)을 지원해야 하고 각 데이터 포멧도 다르며, 무엇보다도 Point-of-failure가 많았다. 예를 들어 각 시스템 A,B,C의 신뢰도가 99%인 시스템을 묶으면 신뢰도가 97%까지 떨어진다. 이는 시스템이 커질 수록 신뢰도가 더 떨어지는 문제가 발생할 수 있다.
- Kafka는 분산 스트리밍 플랫폼이다. Source 시스템(Producer)은 Kafka로 메시지를 보내고, Destination 시스템(Comsumer)은 Kafka로부터 메시지를 받는다. 또한 확장성이 있고, 장애 허용(fault tolerant)를 하며, 기존 시스템보다 성능이 좋다.
- 아래 그림은 기존 스트리밍 프로세싱을 Kafka를 사용하여 만들었을 때의 예시이다. 이는 시스템간의 의존성을 줄이며, 새 시스템을 더할때 마다 Kafka와 연결만 해주면 되므로 복잡도가 선형적으로 올라간다는 장점이 있다(확장성). 또한 통신 프로토콜을 통합하기 쉽다는 장점도 있다.
- Kafka는 시스템간의 메시지큐, 로그수집, 스트림프로세싱, Event-Driven 기능 등에 사용된다. 예를 들어 Netflix에서는 Kafka를 실시간 모니터링에 사용하고 있다.
- Kafka는 아래와 같은 구성 요소를 가진다.
- Topic :
Topic은 Producer와 Consumber가 소통을 하는 하나의 채널 혹은 폴더이다. 데이터 스트림이 어디에 publish 될지 정하는데 사용된다.
- Broker :
broker는 topic을 서빙한다. broker는 서버라고도 하며 kafka와 broker는 kafka와 서버라고도 표현한다. 하나의 broker는 여러개의 topic을 서빙할 수 도 있고, 반대로 하나의 topic이 여러 broker에서 서빙될 수도 있다.
- Producer :
토픽을 지정하고 메시지를 게시한다.
- Comsumer :
토픽으로부터 메시지를 받아온다.
- Message :
메시지는 디스크에 정렬되어 저장되며, 새로운 메시지가 도착하면 지속적으로 로그에 기록한다.
- Partition & Offset :
Partition은 Topic이라는 폴더 안에 실제로 어떻게 저장이 되는지 가르는 기준이 된다. 그리고 각 Partition 마다 Offset을 갖는다. Producer로부터 메시지를 받을 때, Topic의 각 Partition에 따라서 저장이 되며, 저장된 데이터들은 1번, 2번과 같은 순서 즉, Offset을 갖는다.
- Consumer Group :
Consumer는 Consumer Group 단위로 움직이는데 한 개의 Consumer로 이루어질 수도 있고, 여러개의 Consumer로 이루어질 수도 있다.
- Cluster :
Kafka는 고가용성을 위해 클러스터 위에서 동작한다.
- Zookeeper :
kafka cluster의 요소를 조절하는 역할이다.
'Kafka' 카테고리의 다른 글
Stream Processing With Kafka #5 (0) | 2023.05.07 |
---|---|
Stream Processing With Kafka #4 (0) | 2023.05.07 |
Stream Processing With Kafka #3 (0) | 2023.05.07 |
Stream Processing With Kafka #2 (0) | 2023.05.05 |