-
apache kafka 핵심요소 3가지(Broker, Replication, ISR)Data Base/Kafka 2022. 9. 6. 14:55
replication 즉 복제는 kafka 아키텍쳐의 핵심이다. *cluster에서 서버에 장애가 생길 때 kafka의 *가용성을 보장하는 가장 좋은 방법이 복제이기 때문이다.
*computer cluster(컴퓨처 클러스터) : 여러 대의 컴퓨터 들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 말한다. 클러스터의 구성 요소들은 일반적으로 고속의 근거리 통신망 으로 연결된다. 서버로 사용되는 노드에는 각각의 운영체제가 실행된다. 컴퓨터 클러스터는 저렴한 마이크로프로세스와 고속의 네트워크, 그리고 고성능 분산 컴퓨팅용 소프트웨어들의 조합 결과로 태어났다.
*가용성 : 시스템 품질 속성 중 시스템이 장애 없이 정상적으로 운영되는 능력
Kafka broker
kafka broker는 kafka가 설치되어 있는 서버 단위를 말한다. 보통 3개 이상의 broker로 구성하여 사용하는 것을 권장한다. 만약 파티션이 1개이고, replicationdl 1인 topic이 존재하고, broker가 3대 라고 가정하면 broker 3대중 1대에 해당 topic의 정보(데이터)가 저장된다.
Kafka replication
그런데 여기서 처음 등장하는 개념이있다. 바로 replication이라는 것인데, replication은 파티션의 복제를 뜻한다.
partiton 1 , replication 1
만약 replication이 1이라면 partition은 1개만 존재한다는 것이다.
partiton 1 , replication 2
만약 replication이 2라면 partition은 원본 1개와 복제본 1개로 총 2개가 존재한다.
partiton 1 , replication 3
만약 replication이 3이라면 partition은 원본 1개와 복제본 2개로 총 3개가 존재하게 된다. 다만 브로커 개수에 따라서 replication개수가 제한되는데 즉 broker 개수가 3이면 replication은 4가 될 수 없다.
ISR(In Sync Replica)
위에서 도식화 된 partition 중 에 원본 partition 1개 는 Leader partition이라고 부른다. 그리고 나머지 2개 복제본 partiton은 Follower partition이라고 부른다. Leader partition + Follower partition을 합쳐서 ISR(In Sync Replica)라고 볼 수 있다.
왜 replicate를 사용할까?
Replication은 partition의 *고가용성을 위해 사용된다.
*고가용성 (High Availability) : 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. 고가용성이란 "가용성이 높다" 뜻으로 서, "절대 고장 나지 않음"을 의미한다.
시나리오
만약 broker가 3개인 카프카에서 replication이 1이고 partition이 1인 topic이 존재한다고 가정해 보자 갑자기, broker가 어떠한 이유로 사용이 불가능하게 된다면, 더이상 해당 partition은 복구 할 수 없다.
만약 replication이 2였다면 어떻게 될까? broker 1개가 사용불가능이 되더라도 복제본 즉 Follower partition이 존재하므로 복제본은 복구가 가능하다.나머지 1개가 남은 Follower partiton이 Leader partition 역할을 승계하게 되는 것이다.
Leader partition과 Follower partition의 역할
Producer가 topic의 partiton에 데이터를 전달한다. Producer가 topic의 partiton에 데이터를 전달 할때 전달 받는 주체가 바로 Leader partition이다. Producer에는 ack라는 상세 옵션이 있다.
ack 상세 옵션
ack를 통해 고가용성을 유지할 수 있는데 이 옵션은 partition의 replication과 관련이 있다. ack는 0, 1, all 옵션 3개중 한개를 골라서 사용할 수 있다.
ack = 0
ack가 0일 경우 프로듀서는 Leader partition에 데이터를 전송하고 응답값은 받지 않는다. 그렇기 때문에 Leader partition에 데이터가 정상적으로 전송되었는지 그리고 나머지 partition에 정상적으로 복제되었는지 알 수 없고 보장할 수 없다. 이 때문에 속도는 빠르지만 데이터 유실가능성이 있다.
ack = 1
ack가 1일 경우에는 Leader partitiondp 데이터를 전송하고 Leader partiton이 데이터를 정상적으로 받았는지 응답값을 받는다. 하지만 나머지 partition에 복제되었는지 알 수 없다.
만약 Leader partition이 데이터를 받은 즉시 브로커 장애가 발생한다면 나머지 partition에 데이터가 미처 전송되지 못한 상태이므로 이전에 ack 0옵션과 마찬가지로 데이터 유실가능성이 있다.
ack=all
마지막 all 옵션은 1옵션의 추가로 follower partition의 복제가 잘 이루어져는지 응답값을 받는다. 다시 말해, Leader partition에 데이터를 보낸 후 나머지 Follower partition에도 데이터가 저장되는 것을 확인하는 절차를 거친다.
따라서 ack = all 옵션을 사용 할 경우 데이터 유실은 없다고 생각하면 된다. 그렇지만 0,1에 비해 확인하는 부분이 많기 때문에 속도가 현저히 느리다는 단점이있다.
정리
replication이 고가용성을 위해 중요한 역할을 한다면 replication이 많을 수 록 좋을까? 하지만 replication의 갯수가 많아지면 그만큼 broker의 리소스 사용량도 늘어나게 된다.
따라서 kafka에 들어오는 데이터량과 retention date 즉, 저장시간을 잘 생각해서 replication 개수를 정하는 것이 좋다. 예를들어 3개이상의 브로커를 사용할때 replicationdms 3으로 설정하는 것을 권장된다.
[출처-https://youtu.be/qpEEoGpWVig]
'Data Base > Kafka' 카테고리의 다른 글
apache kafka Topic (0) 2022.09.05 apache kafka 개요 (0) 2022.09.02