스터디/kafka

[Apache Kafka] Apache Kafka Study 03: 카프카 클러스터 운영

Ji0_ 2024. 5. 16. 01:25

해당 포스트는 아래의 강의 수강 후 작성됨을 알려드립니다.

 

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지! |

데브원영 DVWY | 실전 환경에서 사용하는 아파치 카프카 애플리케이션 프로그래밍 지식들을 모았습니다! 데이터 파이프라인을 구축하는데 핵심이 되는 아파치 카프카의 각종 기능들을 살펴보고

www.inflearn.com


카프카 클러스터를 운영하는 방법

아파치 카프카 클러스터를 서버에 직접 설치하고 운영하는 것이 가장 기본적이 방법이다.

이 방법은 각종 설정을 직접 컨트롤하고 세부 서버 설정이 가능하다.

 

그러나 최적화된 카프카 클러스터 사용은 많은 시행착오와 노하우를 요구한다.

이러한 운영 시행착오를 줄이면서 최고의 카프카 클러스터를 빠르게 설치하고 안전하게 운영하기 위한 SaaS를 도입할 수 있다.

 

SaaS

SaaS란 클라우드 서비스 제공업체가 소프트웨어와 인프라를 관리하며 플랫폼을 제공하는 것을 말한다.

SaaS를 기반으로 한다면 업체를 거치기 때문에 운영하는데 있어 매우 편리해진다.

설치 방법별 서비스 형태 종류

온프레미스의 경우 커스터마이징으로 인한 최적화가 가능하다는 것이 장점이지만 초기 비용이 들고 유지보수 비용이 든다는 것이 큰 단점이된다. 

스타트업과 같은 아직 운영방식이 결정되지 않은 곳에서는 IaaS  사용을 많이 한다.

온프레미스는 물리 장비를 직접 설치해야하기 때문에 이전 설명과 같이 초기 비용이 든다. 

또한 카프카도 직접 설치를 해야하는데, 이때 카프카는 무료인 오픈소스 카프카와 유료인 기업용 카프카가 있다.

오픈소스 카프카는 모니터링 툴이 제외되어 있기 때문에 이것 또한 고려사항에 들어간다.

대신 기업용 카프카의 경우는 모니터링 툴을 포함하여 커넥터 또한 제공을 한다.

 

IaaS의 경우에는 클라우드 서비스를 통해 컴퓨팅 리소스를 발급 받는다. 컴퓨팅 리소스를 발급 받게되면 스케일업 혹은 스케일 아웃 시에도 편하게 운영할 수 있다는 장점이 있다.

 

그러나 IaaS도 온프레미스처럼 노하우가 많이 필요하다는 특징이 있다.

 

1. 오픈소스 카프카를 직접 설치하여 운영하는 경우

이 경우는 IaaS 또는 온프레미스 환경이 대표적이다.

카프카는 전송된 데이터를 모두 파일 시스템에 저장하고 대규모 통신이 일어나기 때문에 고성능 하드웨어 사용을 해야한다.

추천 하드웨어 설정

오픈소스 카프카를 직접 설치하는 경우에는 개발용 카프카 클러스터와 상용 환경 카프카 클러스터 경우가 있다.

개발용 카프카 클러스터가 상용환경 카프카 클러스터보다는 브로커 개수가 적겠지만 그래도 5개정도 사용한다. 

브로커는 많을 수록 사용과 테스트가 용이해진다. 따라 개발용이여도 브로커가 적어도 3개 이상인 것이 좋다.


SaaS형 아파치 카프카 소개

1. 클라우드 서비스 - 컨플루언트

컨플루언트는 카프카를 최초로 생각하고 제안한 제입크랩스와 동료등이 설립한 회사이다.

제이크랩스는 카프카의 성장 가능성을 보고 링크드인을 퇴사항 후 추가 기능을 가진 카프카를 제공하는 스타트업을 설립했다. 컨플루언트는 50억 달러를 가진 회사이다.

컨플루어트에서 오픈소스로 공개하고 관리하고 있는 스키마 레지스트리 ksqlDB같은 소스코드들은 카프카를 활용하는 생대계의 범위를 늘려가고 있다.

 

컨플루언트는 컨플루언트 클라우드, 큰플루언트 플랫폼 두가지 형태로 제공한다.

클라우드 같은 경우에는 클라우드 기반 카프카 클러스터여서 완벽하게 위임을하는 SaaS이다.

컨플루언트 클라우드를 사용하면 클라우드 기반으로 GCP나 AWS같은 클러스터 설치 위치를 지정하고 나서 여기서 여러 카프카 블로커와 클러스터 운영이 가능하다.

카프카는 엔터프라이즈 수준의 보안수준 설정이 좀 힘든데 컴포넌트 클라우드를 사용하면 기본적으로 카프카 클러스터를 생성하고 운영할 때 이런 엔터프라이즈 수준에 보안 수준을 제공한다.

 

2. 컨플루언트 플랫폼

컨플루언트 플랫폼은 온프레미스 기반의 설치형으로 카프카 클러스터를 컴포넌트에서 제공하는 기능들을 다 쓸수 있다.

기본적으로 컨플루언트 플랫폼에서는 서버를 내부에서 발급받아서 직접 설치하는 형태이다.

플랫폼에서는 단계별 스토리지 기능을 제공하는데 이 기능은 카프카 데이터 스트리밍 레이커나 더 나은 성능을 내기 위해서 필요한데 컨포넌트 플랫폼에서 자체 개발한 형태로 제공을 하니 유용하다.

아파치 카프카는 직접 설치하면 아무것도 눈에 보이지 않느데 컨포넌트 플랫폼은 GUI를 제공하다는 점에서 모니터링에 아주 쉽게 사용이 가능하다.

 

3. AWS MSK

AWS의 공식 서비스 중 하나이다. 완전 관리형의 고가용성 아파치 카프카 서비스를 사용하는 것이다.

기본적으로 카프카는 오픈소스인데 사용 시에 바로 AWS에서 설치, 추가적인 모니터링을 MSK에서 사용하면 다 진행시켜준다.

따라 AWS 인프라에서 인스턴스를 다운하거나 거기서 오픈소스 카프카와 주키퍼를 설치할 필요없이 MSK를 사용하면 카프카 클러스터 생성, 수정, 삭제는 데시보드를 통해 모두 제공받을 수 있다.

또한 안전하게 접속할 수 있도록 클러스터 생성 시 TLS 인증 보안 설정도 가능하다.

MSK 같은 여경우에는 기본적으로 오픈소스 기반으로 카프카를 설치하기 때문에 활용하고자 하는 아파치 카츠카 버전을 직접 선택해서 클러스터 생성이 가능하다.

MSK로 생성한 클러스터는 AWS에서 제공하는 인프라 영역에  구축되기 때문에 AWS에 있는 리전, 서브셋 같은 부분에서 장점이 있다.


SaaS형 아파치 카프카의 장점과 단점

장점

1. 인프라 관리의 효율화

카프카 클러스터는 상용환경에서 최소 3대 이상의 서버로 운영한다. 이 3대 이상의 서버는 카프카의 데이터를 저장하는 브로커인데, 이 브로커를 최소 3대 이상 저장하여 데이터를 안전하게 운영하는데 사용한다.

클러스터를 담당하고 운영하는 개발자 입장에서는 3대의 서버를 계속 모니터링 해야한다는 것이 큰 리소스 사용향이 될 수 있다.

따라 모니터링에도 전담하는 인력이 필요한데 SaaS를 사용하는 경우에는 인프라 운영에서 자유로운 부분이 있다.

SaaS서비스는 이슈가 생긴 서버가 있을 시에 이슈가 생긴 서버를 제외하고 신규 장비로 동일한 옵션과 스펙의 브로커를 계속 추가 하기 때문에 클러스터의 데이터 사용향이 순간적으로 많아지거나 혹은 이슈가 발생하더라도 카프카 클러스터를 운영하는 입장에서는 그 짐을 덜어줄 수 있다고 볼 수 있다.

데이터 사용량이 많아졌을 때는 온프레스나 IaaS 사용시에는 브로커를 추가하기 위해서는 인력 소모가 크다. SaaS의 경우에는 클릭 한번으로 브로커 개수만 조절하면 쉽게 스케일 인 아웃이 가능하다.

 

2. 모니터링 대시보드 제공

카프카는 브로커들이 제공하는 지표들을 수집하는 것에서 그치치 않고 데이터를 대시보드화하여 시각화를 해야 운영을 용이하게 할 수 있다. SaaS형에서 이 아닌곳에서는 이를 직접 설치해야하기 때문에 SaaS형을 사용하는 것이 운영에는 더 용이하다.

 

3. 보안설정

카프카 보안설정은 운영보다도 더 많은 카프카 내부에대한 지식이 필요하다.

보안이 설정되지 않는 클러스터는 호스트와 포스 번호만 알면 모든 토픽의 데이터를 가져갈 수 있기 때문에 보안설정이 중요하다.

SaaS형 클러스터는 보안설정을 기본적으로 제공하는 경우가 대다수이다.  

 

단점

1. 서비스 사용 비용

카프카 클러스터를 직접 설치하고 운영하면 실행 서버의 사용 비용만 들지만 SaaS형 클러스터를 사용하게 되면 최소한 3대의 브로커로 사용해도 한달에 120만원 정도가 발생할 수 있다.

따라 SaaS를 사용하는 것에 대해 고민해볼 필요가 있다.

 

2. 커스텀마이징 제한

MSK같은 클러스터 사용시에는 직접 서버를 운영할 때 최적화 옵션을 사용할 수 있는 것과는 다르게 설치부터 모든 부분이 자동화가 되어있기 때문에 커스텀마이징에 제한이 생기게된다.

 

3. 클라우드의 종속성

SaaS형 카프카는 클라우드 서비스 업체를 선택해야하기 때문에 한번 선택하면 해당 서비스에 종속된다.

 

따라 SaaS형 카프카 사용시 이런 부분들을 살펴봐야한다.

 

그럼에도 SaaS형 카프카를 사용하는 것이 나은 경우

클라우드로 제공되는 SaaS형 카프카는 직접 브로커들을 설치하고 운영하는 것보다 확실한 장단점을 가진다.

그럼에도 카프카 클러스터 운영에 대한 노하우가 부족하한 상태에서 빠르게 클러스터를 구축하고자 하면 SaaS형 카프카는 좋은 선택이 될 수 있다. 이 때 SaaS형 카프카를 사용한다해도 카프카에 대한 이해가 없다면 어려울 수 있다.

따라 SaaS형 카프카 도입시에는 여러가지 조건들을 고려 후 운영하는 것이 현명한 판단이다

 

퀴즈

1) 컨플루언트 플랫폼은 클라우드에서 제공하는 SaaS형 카프카이다 (O/X)

2) SaaS를 사용하면 비용이 반드시 절감된다 (O/X)

3) SaaS형 카프카를 사용하더라도 주키퍼는 사용자가 운영해야 한다 (O/X) 

4) AWS MSK는 컨플루언트의 대표적인 클라우드 서비스이다 (O/X)

5) SaaS형 카프카를 사용하면 카프카에 대한 깊은 지식이 없어도 무관하다 (O/X)


카프카 CLI 툴 소개

카프카 커맨드 라인 툴

카프카 커맨드 라인 툴은 카프카 운영시 가장 많이 접하는 도구이다.

CLI를 통해 브로커 운영에 필요한 다양한 명령을 내릴 수 있다. 현실적으로 카프카 애플리케이션 개발을 위해서는 카프카 커맨드라인 툴과 각 툴을 잘 알고 있어야 한다.

 

커맨드 라인 툴을 통해 토픽 관련 명령을 실행할 때 필수 옵션과 선택 옵션이 있다.

선택 옵션은 지정하지 않을 시에는 브로커에 설정된 기본 값으로 설정된다.

브로커에 설정된 파티션의 개수가 10인데 실질적으로 필요한 파티션의 개수가 5개인 경우에 5개로 지정을 해야한다.

지정하지 않고 10개로 설정이 되면 이미 설정된 파티셔은 없앨수가 없기 때문에 설정값을 잘 봐야한다.


로컬에서 카프카 브로커 실행

 

2.12-2.5.0 버전으로 다운로드

config에 있는 server.properties 파일에는 브로커 실행 시 필요한 옵션들이 포함되어 있다.

카프카 브로커에서 데이터는 파일 시스템에 저장되는데 이 파일시스템은 data 파일에 저장된다.

해당 파일에서는 파티션 개수등이 저장되어있다.

 

카프카 브로커 실행 전에는 주키퍼를 실행해야하는데, 주키퍼는 따로 설정을 안해도 기본적으로 dir이 tmp의 주키퍼로 설정되어있다.

따로 설정하지 않고 바이너리에 있는 주키퍼를 실행하면 된다.

 

주키퍼가 안전하게 실행되고 나면 다음으로 실행되는 것은 카프카 브로커이다.

브로커는 kafka-server-start.sh, server.properties 를 바탕으로 실행되며, 카프카 서버는 브로커라는 것을 알 수 있다.

항상 주키퍼 실행 후에 브로커가 실행된다.

 

카프카가 정상적으로 실행되는지, 즉 브로커가 정상적으로 실행되는지 확인하기 위해서 쉘 스크립트를 확인할 수 있다.

바이너리 안에는 여러가지 쉘 스크립트가 있는데 그중에서도 breker-api-versions 라고 하는 쉘 스크립트를 사용하면 로컬 호스트인 카프카 브로커에 대해서 정상적으로 띄어졌는지 통신을 통해 각종 옵션 정보를 조회할 수 있다.

추가적으로 kafka-topics 쉘을 활용하여 로컬 호스트에 있는 카프카 브로커와 연동하여 카프카 리스트를 가져올 수 있다.

 

테스트 편의를 위해서 호스트 설정도 가능하다.

 

실습을 위해 config 파일의 server.properties에서 다음과 같은 설정을 해준 뒤

 

주키퍼 실행 후 브로커를 실행한다.

정상적으로 실행되었는지 확인하기 위해서 다음과 같은 명령어를 사용해 확인할 수 있다.

 

이후 있을 실습에서 사용이 용이하게 하기 위해 my-kafka를 설정할 것이다.

터미널에서 sudo vi /etc/hosts 사용 후 비밀번호를 입력하면 다음과 같은 파일이 열리는데, 이 때 127.0.0.1을 my-kafka로 설정하게 되면 이 이후 127.0.0.1의 주소는 my-kafka로 표시가된다.


퀴즈 정답: 

1. X

컨플루언트 플랫폼은 클라우드 제공이 아니라 온프레미스로 직접 설치이다.

2. X

3. X

4. X

AWS MSKSMS 컨플루언트와 무관하며 AWS에서 제공하는 것이다.

5. X