Big Data/Kafka

[Kafka] 카프카의 고성능 디자인 모델

ooeunz 2020. 7. 6. 16:00
반응형

카프카는 중앙 집중형 빅데이터 스트리밍 플랫폼으로 고성능으로 디자인된 플랫폼입니다. 이와 같이 고성능으로 실시간 메시지를 처리하기 위해 카프카는 내부적으로 몇 가지 특징을 가지고 있습니다.

 


분산 시스템

그 첫번째로 카프카는 분산 시스템을 기반으로 디자인되었습니다. 분산 시스템이란 네트워크로 이루어진 컴퓨터들의 그룹으로서 시스템 전체가 공통의 역할을 하는 서버 컴퓨터의 집합입니다. 분산 시스템의 경우 단일 시스템보다 더 높은 성능으로 작동할 수 있고, 분산 시스템의 일부 노드가 장애가 발생하더라도 다른 노드가 이를 대신하여 처리할 수 있으므로 장애에 대한 내성을 가지고 있습니다. 또한 추가적으로 서버를 추가하는 것과 같이 시스템 확장에 용이합니다.

 

예를 들어 초당 1000개의 메시지를 처리하게 되면 CPU의 사용률이 100%에 달하는 서버가 한대 있다고 가정해보겠습니다. 만약 메시지가 초당 900개가 들어올 경우 해당 서버의 CPU 사용률은 90%로 만약 장애가 발생한다면 서비스가 중지될 수 있을 정도로 위태로운 상황입니다. 이때 같은 역할을 하는 서버를 추가하여 메시지를 분산시킨다면 어떻게 될까요?

 

각각의 서버는 초당 450개의 메시지를 처리하고 CPU 사용률은 45%를 유지하게 됨으로써 안정적으로 서비스를 운영할 수 있습니다. 이와 같이 2개의 서버를 운영함으로써 2배의 성능으로 서비스를 운영할 수 있게됩니다. 이와 같이 동일한 서버 컴퓨터를 증설하는 것을 Scale-Out이라고 합니다. 그렇다면 초당 2000개의 서버 컴퓨터를 사용하면 되지 않냐고 생각할 수 있습니다.

 

맞습니다. 서버 컴퓨터의 성능 자체를 증가시키는 것을 Scale-Up이라고 합니다. Scale-Up을 하게 될경우 추가적으로 다양한 서버에 트래픽을 분산시켜줘야 하는 로드 벨런스의 비용을 아낄 수 있다는 장점이 있지만, 만약 서버가 다운될 경우 이를 대신할 서버가 없기 때문에 서비스가 중지될 수 있는 위험성이 있습니다.

 

 

 

[Teah] Load Balancer(로드 밸런서)

로드 밸런서 4차 산업혁명 시대가 되고 인터넷을 통해 거의 모든 작업들이 처리되고 있습니다. 웹툰부터 시작해서 페이스북 좋아요나 유튜브 스트리밍까지 모든 전자기기가 인터넷을 이용해 통

ooeunz.tistory.com

 

따라서 현재에 와서는 하나의 서버에 장애가 생기더라도 다른 서버가 이를 대신하여 수행할 수 있도록 분산 시스템을 구축해나가고 있습니다. 하지만 불필요하게 서버만 계속 추가하다보면 불필요한 비용이 증가하기 때문에 무조건 서버를 늘려 부하를 분산하기보다는 장애 상황과 서버의 리소스 사용량 등을 고려해 적정한 수준의 Scale-up과 적당한 수의 서버로 Scale-Out 하는 것이 좋습니다.

 

※ 참고로 카프카 문서에 따르면 링크드인에서 가장 사용량이 높은 클러스터의 경우에는 60대의 브로커를 운영하고 있습니다.

 

 

페이지 캐시

카프카는 파일 I/O의 성능을 향상시키기 위해 한번 읽은 파일의 내용을 페이지 캐시라는 영역에 저장해두었다가, 동일한 접근이 있을 시 페이지 캐시에서 읽음으로써 상대적으로 속도가 느린 디스크로의 접근을 최소화하고 있습니다. 실제로 카프카 공식 문서에서도 디스크 중 가격이 가장 저렴한 SATA 디스크를 사용해도 무방하다고 적혀있을 정도로 페이지 캐시에 의한 성능 향상은 유의미합니다.

 

하지만 OS는 물리적 메모리에서 카프카 애플리케이션이 사용하는 부분을 제외한 잔여 메모리를 이용해 페이지 캐시로 이용하기 때문에 하나의 시스템에 카프카를 제외한 다른 애플리케이션을 함께 실행시키는 것을 권장하지 않습니다.

 

 

배치

서버와 클라이언트가 통신하게 되면 필연적으로 I/O가 발생하게 됩니다. TCP로 통신하게 될 경우 매번 3way-handshaking과 4way-handshaking이 발생하기 때문에 이 역시 속도를 저하시키는 원인이 됩니다. 이와 같은 성능을 개선하기 위해서 카프카는 작은 I/IO를 여러 개 묶어서 처리할 수 있도록 배치 작업으로 처리하게 됩니다.

 

 

 

[Network] TCP / UDP

TCP TCP란 인터넷 상에서 데이터를 메세지 형태로 보내기 위해서 ip와 함께 사용하는 프로토콜 입니다. TCP는 아래와 같은 특성을 가지고 있습니다. 1. 연결형 서비스 입니다. 2. 높은 신뢰성을 �

ooeunz.tistory.com

예를 들어 전송하는데 1초가 걸리는 메시지가 4개 있다고 가정했을 때 해당 메시지를 모두 전송하기 위해서는 4초라는 시간이 필요하게 됩니다. 하지만 4개의 작은 메시지를 묶어서 한 번에 보내게 되면 네트워크 왕복의 오버헤드를 줄일 수 있게 되어서 1초라는 시간만이 필요하게 됩니다. 이러한 배치 작업은 카프카의 속도 향상에 큰 도움을 줍니다.

 

 

다음 포스팅에서는 카프카의 고가용성을 위한 데이터 모델인 토픽과 파티션에 대해 살펴보도록 하겠습니다.

반응형