Kafka
Turaco에서 제공하는 메시징 처리를 위한 Kafka 컴포넌트
Apache Kafka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 수천 개의 회사에서 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼입니다.
현재 많이 사용하는 HTTP 및 REST를 기반으로 하는 기존 접근 방식은 모든 서비스가 단일의 동기식 런타임에 함께 결합되기 때문에 사용 가능한 옵션을 제한합니다. 마이크로서비스는 분산 시스템이기 때문에 모놀리식 시스템에서는 볼 수 없는 여러 문제가 발생하며, 그 예로 더 복잡한 장애 모드로 인해 자동화 및 DevOps 관행에 대한 의존도가 증가하는 문제가 있습니다. 또한 불가피하게 오류가 발생하는 경우 시스템 중단 없이 오류를 관리할 수 있는 보다 일반적이고 탄력적인 설계 패턴을 필요로합니다. 하지만, 이벤트 스트리밍을 추가하면 서로 다른 경계를 가진 컨텍스트를 분리할 수 있으므로 장애 모드가 감소하고, 보다 많은 확장 가능한 솔루션을 얻을 수 있습니다. 이를 통해 서로 다른 팀이 서로에게 영향을 미칠 위험을 줄이면서 발전하고 변화할 수 있습니다.
위의 설명과 같이 마이크로서비스 아키텍처는 모놀리식 아키텍처보다 보다 더 많은 시스템 및 인프라적인 복잡성(디커플링, 비동기성)을 가지게 됩니다. 이러한 복잡성을 구현하고 관리하기 위해서는 메시지 브로커가 반드시 필요합니다.
대표적인 메시지 브로커 중의 하나인 Kafka의 장점과 단점은 아래와 같습니다.
- 대용량 데이터 분산 처리 : 분산형 아키텍처를 통해 대용량 데이터를 처리할 수 있습니다.
- 실시간 처리 : 실시간으로 대용량 데이터를 처리할 수 있습니다.
- 고가용성 : 특정 브로커가 다운되더라도 또 다른 브로커가 대신 처리할 수 있습니다.
- 확장성 : 메시지 브로커의 수평 확장을 통해 시스템의 처리량 증가시킬 수 있습니다.
단점:
- 시스템 복잡도 : 메시지 브로커와 분산 아키텍처등으로 인해 시스템이 복잡합니다.
- 서버 및 용량 비용 : 시스템이 복잡한 만큼 서버 및 데이터 저장을 위한 스토리지 비용이 증가합니다.
- 운영 비용 : 시스템 구성 및 분산 아키텍처 등에 대한 기술적인 이해도와 운영 능력이 필요합니다.
Turaco에서는 이러한 메시지 브로커를 클러스터 수준에서 외부 시스템의 브로커까지 사용할 수 있는 방법을 제공합니다.
본 챕터에서는 Turaco에서 제공하는 Kafka 컴포넌트의 사용법에 대해 설명합니다.
컴포넌트 배치
Kafka 컴포넌트는 아키텍처 설계 화면 (이하 디자이너 화면)에서 좌측에 위치한 컴포넌트 목록에서 '메시징' 카테고리에 있습니다.
- 설계화면 왼쪽 컴포넌트 리스트 화면에서 Kafka 컴포넌트를 선택 후 디자이너 화면으로 드래그 & 드롭합니다.

- 배치된 Kafka 컴포넌트에 대한 이름과 설명을 입력 후 확인 버튼을 클릭합니다.
이름과 설명은 필수 입력값이며 입력하지 않으면 확인 버튼이 활성화되지 않습니다.
속성 설정
Kafka 클러스터를 구성하기 위한 속성값을 설정합니다.
복제 노드 수
- Kafka 클러스터의 복제 노드 수를 설정합니다.
복제 노드 수의 기본값은 3입니다. 변경하고자 하는 값으로 입력합니다.
토픽
Kafka 클러스터 설정에서 가장 중요한 속성이며 4가지 속성을 설정할 수 있습니다.
4. 데이터를 몇개의 파티션으로 저장할 것인지, 복제 인수를 어떻게 지정할 것인지 설정할 수 있습니다.

파티션 수는 복제 노드 수와 일치해야 합니다.
일치하지 않으면 클러스터 설치 시 오류가 발생할 수 있습니다.
호스트
호스트 설정은 외부에 별도로 운영중인 Kafka 클러스터가 이미 있는 경우 해당 시스템을 사용하기 위한 옵션입니다.

6. 외부에 이미 운영중인 시스템을 사용하기를 원할 경우 해당 시스템에 대한 엔드포인트를 입력합니다.
호스트를 지정시,
Kafka 클러스터를 위한 배포 리소스(Helm Chart)가 생성되지 않습니다.
프로토콜
Kafka 클러스터와 통신하기 위한 프로토콜을 설정합니다.
7. 드롭다운 버튼을 선택합니다.
프로토콜 리스트를 노출 후 원하는 프로토콜을 선택합니다.
(현재는 PLAINTEXT만 지원합니다)

포트

8. PLAINTEXT 및 TLS 각각의 경우에 대한 포트를 입력합니다.
프로토콜 속성에서 지정된 값에 따라 여기서 설정한 포트를 사용합니다.
포트 정보는 3가 지 정보를 반드시 입력해야 합니다.
스토리지
컨테이너는 로컬 스토리지를 사용할 수 있으나 컨테이너의 특성상 재시작되거나 삭제되는 경우 저장된 데이터가 같이 삭제됩니다.
이러한 특성 때문에 외부에 영구 볼륨을 설정하고 저장을 해야 데이터가 유실되지 않고 보관이 됩니다.
Turaco에서는 운영 환경에서 많이 사용하는 2가지 스토리지 클래스를 지원합니다.
- NFS 기반의 스토리지 클래스 (tlc-nfs-sc)
- Disk 기반의 스토리지 클래스 (tlc-block-sc)
Turaco Kafka 컴포넌트에서 스토리지 클래스 및 접근모드는 아래와 같이 고정값으로 지정되어 있으며 수정할 수 없습니다.
- 접근모드 -> ReadWriteOnce
- 스토리지 클래스 -> tlc-block-sc
9. 스토리지 설정에는 아래와 같이 3개의 속성이 있습니다. 접근 모드는 아래와 같이 3가지 속성이 있습니다.
Kafka 컴포넌트에서는 고정(ReadWriteOnce)되어 있습니다.

서비스 및 역할
-
서비스 선택을 위한 드롭다운 버튼을 선택합니다.
-
디자이너에 추가한 백엔드 컴포넌트 이름 목록이 나열됩니다.
Kafka 클러스터를 이용할 백엔드 서비스를 선택합니다. -
백엔드 서비스를 선택하면 선택한 백엔드 서비스에 대한 역할 선택 메뉴가 나타납니다.
-
producer 또는 consumer를 선택합니다.
서비스 속성창에서 선택된 백엔드 서비스에 대해 역할을 선택할 수 있습니다.
선택할 수 있는 역할은 아래와 같습니다.
- Publisher -> 설정된 토픽에 대해 메시지를 발행하는 역할
- Subscriber -> 설정 된 토픽에 대해 메시지를 구독하는 역할
하나의 백엔드 서비스에 대해 역할은 두 개 모두 선택할 수 있습니다.

선택된 백엔드 서비스는 애플리케이션 생성 시 Kafka 클러스터를 사용할 코드가 주입되어 생성됩니다.