카프카란?
링크드인은 다 수의 웹 서버에서 생성되는 로그를 효율적으로 추적/수집하기 위한 목적으로, 분산 메시징 처리 시스템인 Kafka(이하 카프카)를 개발했다. 대량의 데이터를 실시간(real time)으로 높은 처리량(high throughput)을 보장하는 카프카는 2011년 출시되어 현재까지 그 성능을 입증하였고, 다수의 빅 테크 기업에서 로그 수집, 데이터 허브 시스템 등에 접목하여 활용되고 있다.
카프카 관련 글
2021.12.31 - [OSS(Open Source)] - 카프카(kafka) - Docker + 카프카 클러스터 구축 및 토픽생성, 메시지 전송
2021.12.31 - [OSS(Open Source)] - 카프카(kafka) - VSCode에서 Java Producer/Consumer 생성 with Gradle
카프카의 출현 배경
링크드인은 대량의 메시지를 높은 처리량을 담보하며 실시간으로 처리해야 하는 것을 주 목적으로 하는 시스템을 원했다. 카프카 이전에 사용된 메시지 처리 시스템은 다음과 같은 단점을 안고 있다.
- 엄격한 트랜잭션 관리는 높은 처리량을 보장할 수 없다.
- 메시지 큐 방식은 장기적 측면에서 효율적인 관리가 어렵다.
- 대량의 메시지를 효율적으로 관리할 수 없다.
- 메시지 수신자가 임의로 메시지를 수신할 수 없다.
위 단점을 개선한 카프카는 다음의 기능을 갖춘 시스템으로 구현됐다.
- 높은 처리량
- 수신자가 원하는 시점에 데이터 수신(pull)
- 서드파티간 유연한 메시지 송/수신(연동)
- 메시지 영속화( 물리적 저장 -> 디스크 )
위 기능을 갖춘 카프카는 Pub/Sub 메시징 모델을 채용하였다.
카프카 관련 주요 용어
- 프로듀서 - 데이터를 브로커에 보내는 주체
- 브로커 - 프로듀서, 컨슈머 사이에서 데이터를 전달하는 서비스
- 컨슈머 - 브로커로 부터 데이터를 취득하는 주체
- 큐 - 브로커는 큐 모델을 사용하여 메시지를 관리한다.
- 토픽 - 메시지를 관심사(토픽)에 따라 분리할 수 있다. 프로듀서와 컨슈머는 특정 토픽의 메시지를 송수신할 수 있다.
- 파티션 - 토픽의 분산 처리 지원
- 주키퍼 - 분산 처리를 위한 관리도구로서 브로커에서 관리되는 토픽, 파티션등의 메타정보를 관리한다.
- 카프카 클라이언트 - 카프카 운영에 필요한 도구를 제공한다.
- 카프카 클러스터 - 브로커, 주키퍼에 의해 구성된 클러스터 시스템
프로듀서
- 프로듀서 API를 통해 브로커에 데이터를 송신하는 주체를 의미한다. Log4J, Flume, Logstash등 서드 파티에 프로듀싱 기능이 포함된 OSS도 있다.
브로커
- 브로커는 서버에 데몬 프로세스로서 동작한다. 프로듀서에게서 전달 받은 메시지를 수신하고 컨슈머 Pull 요청에 대해 메시지를 전달한다. 처리량 향상을 위한 스케일 아웃이 가능하다. 브로커에 수신된 모든 데이터는 영속화 기능을 통해 장기 보관할 수 있다.
컨슈머
- 컨슈머 API를 통해 브로커에 저장된 메시지를 취득한다. 프로듀서와 마찬가지로 컨슈머 기능이 포함된 제품이 많이 있다.
주키퍼
- 주키퍼는 다수의 카프카 클러스터(브로커, 주키퍼 서버)를 관리하기 위한 관리도구다. 카프카 뿐만 아니라 하둡, HBase, 쿠버네티스등에서 사용되고 있다. 설치과정에서 살펴보겠지만 주키퍼 서버는 홀 수로 구성된다. 주키퍼는 다수의 클러스터가 존재 할 때, 과반수 이상의 서버에 데이터 쓰기가 성공했을 때만 성공으로 간주하기 때문이다.
For replicated mode, a minimum of three servers are required, and it is strongly recommended that you have an odd number of servers. If you only have two servers, then you are in a situation where if one of them fails, there are not enough machines to form a majority quorum. Two servers are inherently less stable than a single server, because there are two single points of failure.
https://zookeeper.apache.org/doc/r3.7.0/zookeeperStarted.html
마치며..
다음 블로그에서 도커를 사용하여 Kafka 테스트 환경을 구성해보도록 한다.
참조: 실전 아파치 카프카 - 한빛미디어
'Web Programming' 카테고리의 다른 글
카프카(kafka) - VSCode에서 Java Producer/Consumer 생성 with Gradle (0) | 2021.12.31 |
---|---|
카프카(kafka) - Docker + 카프카 클러스터 구축 및 토픽생성, 메시지 전송 (0) | 2021.12.31 |
Nginx log 관련 설정 파헤치기 (feat. AWS EC2) (0) | 2021.12.15 |
AWS EC2 웹 서버 nginx 설치, 설정 부터 실행까지 ( 프리티어 ) (0) | 2021.12.14 |
Spring boot - Log4j 2.x 취약점 (ldap, jndi공격) 현상 및 해결방법 (0) | 2021.12.13 |