카프카(Kafka)란?
아파치 카프카(Apache Kafka)는 분산 스트리밍 플랫폼이며 데이터 파이프 라인을 만들 때 주로 사용되는 오픈소스 솔루션이다.
카프카는 대용량의 실시간 로그처리에 특화되어 있는 솔루션이며 데이터를 유실없이 안전하게 전달하는 것이 주목적인 메세지 시스템에서 Fault-Tolerant한 안정적인 아키텍처와 빠른 퍼포먼스로 데이터를 처리할 수 있다고한다.
RabbitMQ와 같은 다른 메세지큐와의 성능 차이가 난다고한다 (훨씬 빠르게 처리).
<img src=https://user-images.githubusercontent.com/45562285/65389251-21e18380-dd8f-11e9-9add-eb0c2e65e460.png>
Kafka의 broker는 topic을 기준으로 메시지를 관리한다. Producer는 특정 topic의 메시지를 생성한 뒤 해당 메시지를 broker에 전달한다. Broker가 전달받은 메시지를 topic별로 분류하여 쌓아놓으면, 해당 topic을 구독하는 consumer들이 메시지를 가져가서 처리하게 된다.
기존의 메시징 시스템에서는 broker가 consumer에게 메시지를 push해 주는 방식인데 반해, Kafka는 consumer가 broker로부터 직접 메시지를 가지고 가는 pull 방식으로 동작하기 때문에 consumer는 자신의 처리능력만큼의 메시지만 broker로부터 가져오기 때문에 최적의 성능을 낼 수 있다.
- producer : 메세지 생산(발행)자.
- consumer : 메세지 소비자, 하나의 서버
- consumer group : consumer 들끼리 메세지를 나눠서 가져간다.offset 을 공유하여 중복으로 가져가지 않는다.
- broker : 카프카 서버
- zookeeper : 카프카 서버 (+클러스터) 상태를 관리
- cluster : 브로커들의 묶음
- topic : 메세지 종류, 데이터베이스의 table정도의 개념으로 생각 카프카에 저장되는 데이터를 구분하기위해 토픽이라는 이름을 사용한다.
- partitions : topic 이 나눠지는 단위 하나의 파티션에 대해 데이터의 순서를 보장한다. 만약 토픽에 대해 모든데이터의 순서를 보장받고 싶다면 파티션의 수를 1로 생성하면 된다. 파티션은 각각의 파티션에 대해서만 순서를 보장하고 만약 파티션의 숫작 많아진다면 프로듀서가 보낸 순서대로 메시지를 가져올 수 없다?
- Log : 1개의 메세지
- offset : 파티션 내에서 각 메시지가 가지는 unique id
KAFKA는 기존 메시징과 다르게 메시지를 메모리에 쌓는게 아닌 파일형식으로 저장된다. 생각해보면 KAFKA의 다른 consumer들이 쌓여있는 메시지를 Pull해서 가져가는 것을 생각하면.. 이 데이터는 하드?에 육안으로 확인가능하나 내용을 알 수 없고 일정시간동안 유지되다 삭제된다.
스프링부트 KAFKA API
http://junil-hwang.com/blog/intellij-kafka-spring-api/
참고
카카오에서 활용하는 KAFKA : https://soul0.tistory.com/499
카프카 : https://medium.com/@umanking/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%98%EA%B8%B0%EC%A0%84%EC%97%90-%EB%A8%BC%EC%A0%80-data%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0%ED%95%B4%EB%B3%B4%EC%9E%90-d2e3ca2f3c2
https://engkimbs.tistory.com/691
https://epicdevs.com/17