반응형
/*
-- Title : [kfk] Kafka 장단점 및 동작방식
-- Tag : apache kafka 아파치 카프카
*/
■ 장점
ㅁ 분산 시스템
최초 구성한 클러스터에서 브로커를 추가하는 방식으로 확장 가능하며, 온라인 상태에서도 브로커를 간단하게 추가할 수 있다.
ㅁ 페이지 캐시(Page Cache)
- 메모리(RAM) 영역에 어플리케이션이 사용하는 부분을 할당하고 남은 잔여 메모리를 캐시로 전환하여 디스크 접근 최소화해 I/O 성능을 향상시킨다.
- 페이지 캐시 기능을 통해 높은 처리 속도를 가진다.
ㅁ 배치 전송 처리
- Producer와 Consumer들 간의 수많은 통신을 묶어서 처리한다.
- 네트워크 오버헤드를 줄일 수 있으며 더욱 빠르고 효율적으로 처리 할 수 있다.
- 예: 온라인 상품 구매 프로세스에서 재고 수량은 실시간으로 업데이트 되나, 구매 로그는 실시간 처리 보다는 배치 처리한다.
ㅁ 압축 전송
- 메세지 전송 시 높은 압축 전송을 통해 성능을 높인다.
- 지원 압축 타입: gzip, zstd(높은 압축), lz4, snappy(빠른 응답속도)
ㅁ 고가용성 보장
- 분산 시스템이기 때문에, 하나의 서버가 다운되어도 다른 서버가 대신하여 안정적인 서비스가 가능하다.
- 복제 기능을 제공하고 있으며, 토픽 자체를 복제하는 것이 아닌 토픽의 파티션을 복제한다.
- 원본: 리더(reader)/ 복제본: 팔로워(follower)
- 리더(reader)는 Producer와 Consumer로 부터 오는 모든 읽기와 쓰기 요청을 처리한다.
- 팔로워(follower)는 오직 리더로부터 복제만 하고, 읽기와 쓰기 요청을 처리하지는 않는다.
■ 단점
- 기본 브로커가 3개 이상 필요하므로 서버 비용이 든다.
- 메시지가 수정이 필요하다면 카프카의 성능이 급격히 감소한다.
(메시지가 바뀔필요가 없을때 카프카는 가장 잘 동작한다.) - Producer가 데이터를 압축하고 Consumer가 데이터를 압축 해제하는 과정에서 성능이 떨어진다.
■ 동작 방식
- Producer는 Zookeeper로부터 메시지를 보낼 BrokerID를 요청함.
- Zookeeper는 Producer에게 BrokerID를 리턴함.
- Producer는 전달받은 BrokerID의 Partition Leader에 메시지를 전송함.
- Partition Follower는 전송된 메시지를 전달하여 복제함.
- Consumer는 누적된 Offset만큼 해당 Partition의 메시지를 구독함.
- Zookeeper는 Consumer Group가 가져가야할 Offset을 업데이트하여 전달함.
- Consumer Group은 Offset 값 증가시키면서 Partition Leader에서 메시지 읽어옴.
ㅁ Partition 선택과 Partition 수 / Consumer 수 간의 관계
- Producer가 메시지를 전달할 때 key를 포함해서 전송할 수 있음.
1) key = NULL이면, Partition을 선택하는 기준은 Round-robin 순임. (번갈아 가면서)
2) key가 지정되어있으면, 해당 key를 가지는 데이터는 항상 같은 Partition으로 보내짐. - 하나의 Partition에 대해 같은 Consumer Group 내 여러 Consumer가 이용할 수 없음.
Partition 한개당 하나의 Consumer Group 단위로 Offset을 관리하기 때문에 두개 이상의 Consumer가 하나의 Partition의 메시지를 소비할 수는 없음. - Partition의 수 보다 Consumer의 수가 더 많을 경우, 할당 받지 못한 Consumer는 대기함.
※ Resources
• https://jisootech.notion.site/jisootech/Kafka_1-d56f464e412d4519a3cdea14c53340cc
• victorydntmd.tistory.com/344
• hoing.io/archives/5108
• taes-k.github.io/2020/01/02/kafka-start/
• waspro.tistory.com/645
• https://jyeonth.tistory.com/30
반응형