[Kafka 란?]
- 대용량, 대규모 메시지 데이터를 빠르게 처리하도록 개발된 분산 메시징 플랫폼으로 kafka는 어플리케이션간에 메세지를 교환하기 위해 사용되는 메세징 시스템 입니다(분산 메시지 큐).
예를 들어, 우리가 잘 알고 있는 메일의 경우 보내는 사람은 받는 사람과 상관 없이 메일 서버로 메시지를 보낼 수 있습니다. 보낸 메시지는 메일서버에 저장되어 있고, 받는 사람은 자기가 원하는 시간에 언제든지 메일을 볼 수 있게 됩니다. 카프카도 비슷합니다. 프로듀서는 카프카로 메시지를 보내게 되고, 해당 메시지는 카프카에 저장되어 보관중입니다. 그리고 컨슈머는 카프카에 저장되어 있는 메시지를 필요로 할때, 가져갈 수 있습니다.
[kafka는 왜 사용하는가?]
Source Application(데이터 전송) -> Target Application(데이터 받음)
- 위처럼 처음에는 단방향으로만 존재했지만, Source Application과 Target Application이 많이 늘어나면서 데이터를 전송하는 라인이 매우 복잡해졌습니다. 라인이 많아지면 배포와 장애에 대응하기 어려워집니다. 그리고 특정 부분을 수정해야 할 때 앞단부터 다 수정해야하므로 유지보수 하기도 어렵습니다. 그래서 이러한 복잡함을 해결하기 위해 kafka를 사용하는 것입니다.
- 카프카 도입 전(Point to Point 방식)
이 방식은 큐를 통해서 전달할 메세지를 전달하면 받는 사람이 큐에서 메세지를 사용합니다. 큐 처럼 받는 사람들은 모두 하나씩 큐를 가지고 있고, 보내는 사람들이 목적지 큐에 전달하면 받는 사람이 꺼내 읽습니다. 때문에 데이터 연동의 복잡성이 증가합니다.
- 카프카 도입 후(Pub/Sub 방식)
카프카에는 Topic이라는게 존재하는데 구독자가 특정 토픽이나 이벤트에 구독을 해 놓으면 해당 토픽이나 이벤트에 대한 통지를 비동기 방식으로 받습니다. 즉, Publisher가 Topic에 메세지를 보내면 해당 토픽을 구독해놓은 모든 사용자들에게 메세지가 전송됩니다. producer, consumer 를 분리해서 높은 처리량이 가능합니다.
[정리]
- Point to Point 방식은 메세지를 각각 1명의 사용자만 받을 수 있지만 Pub/Sub방식은 토픽을 구독한 많은 사용자가 메세지를 받을 수 있습니다.
- Point to Point방식은 메세지를 받는 사람이 큐에서 꺼내읽는 방식이지만 Pub/Sub방식은 토픽에서 꺼내오는게 아니라 토픽에서 BroadCast 되는 방식입니다. 사용자들에게 메세지가 통보되는 개념.
[Kafka 아키텍처]
Broker : Kafka를 구성하는 각 서버 1대 = 1 broker
Topic : Data가 저장되는 곳
Producer : Broker에 data를 write하는 역할
Consumer : Broker에서 data를 read하는 역할
Consumer-Group : 메세지 소비자 묶음 단위(n consumers)
Zookeeper : Kafka를 운용하기 위한 Coordination service(zookeeper 소개)
Partition : topic이 복사(replicated)되어 나뉘어지는 단위
[정리]
- Flow : Producer -> Kafka <- Consumer -> DB
- 원래 Producer 와 Consumer의 연관관계가 없기 때문에, Kafka는 둘 사이의 연관 관계를 맺어주는 역할도 한다.
- Producer는 단순히 데이터를 넣어주기만 하고, Consumer는 데이터를 조회해서 DB를 거치기 때문에 데이터를 계속 넣기만 하는 Producer보다 처리가 늦을 수 밖에 없다. 그렇기 때문에 이로인해 생길 수 있는 문제를 즉각적인 응답이 필요없는 비동기 통신을 하는 Kafka를 사용하여 해결할 수 있다.
- Kafka는 순서가 보장되고, 데이터가 파일 형식으로 저장되기 때문에 데이터 손실을 걱정할 필요가 없다.
- 순서보장, 로깅기록이 필요하지 않다면 굳이 Kafka를 사용할 필요가 없다(Kafka가 무겁기 때문). 단순 비동기 처리의 목적으로만 사용할 것이라면 RabbitMQ를 사용하는 것을 고려해봐야한다.
[참고] https://blog.voidmainvoid.net/179
[참고] https://team-platform.tistory.com/11