2장 카프카 환경 구성

2-1. 책의 실습 환경 구성

책에서는 aws 내에서 실습환경을 구성하였으나,

GCP의 무료크레딧을 사용하여 환경을 구성하기로 했다...(금전 이슈ㅠ)

1) 인스턴스 생성

GCP의 인스턴스 그룹을 사용해서 7개의 인스턴스를 통합적으로 생성, 관리하기로 했다.

(아 테라폼 안쓴다 오예)

내가 만든 인스턴스들

2) hosts 파일 수정하기 & ansible을 위한 ssh 키 복사

DNS를 사용하기에는 실습환경에서는 굳이라는 생각이 들어 사용하지 않았다.

차라리 그돈으로 일주일 더 학습하는 것이..

그래서 hosts파일을 수정해서 사용하기로 했다.

ansible용으로 하나, 주키퍼 3대, 카프카 3대로 구성했다.

sudo nano /etc/hosts
<내부ip> peter-ansible01.foo.bar
<내부ip> peter-zk01.foo.bar
<내부ip> peter-zk02.foo.bar
<내부ip> peter-zk03.foo.bar
<내부ip> peter-kafka01.foo.bar
<내부ip> peter-kafka02.foo.bar
<내부ip> peter-kafka03.foo.bar

 

자 이제 ansible으로 카프카를 설치할 것이므로 ssh로 각 인스턴스들을 연결할 수 있도록 해야 한다.

ssh키를 scp 명령을 이용해 ansible 인스턴스에 전송한다.

scp -i keypair.pem keypair.pem key@<ansible01-ip>

 

키를 보냈다면 사용을 위해서 키의 권한을 조정하고

등록하는 과정이 필요하다. 

# 키 권한 조정
chmod 600 keypair.pem
# 키 등록
ssh-agent bash
ssh-add keypair.pem

 

마지막으로 모든 작업이 끝나면 git을 이용해서 예제 파일을 다운로드 한다.

(실습 환경설정 완료?)

git clone https://github.com/onlybooks/kafka2

 

 

2-2. 카프카 클러스터 구성

1) common role 편집 (yum → apt)

책에서는 amazon-linux 또는 centOS를 추천하나 GCE에서 해당 환경이 이용 불가하므로 Ubuntu에서 진행....

이에 yum 코드를 apt를 사용하는 코드로 변경해 주는 작업이 필요했다.

 

따라서 roles/common/tasks/main.yml 파일을 수정할 필요가 있다.

# 변경 코드
---
- name: Set timezone to Asia/Seoul
  timezone:
    name: Asia/Seoul

- name: Install Java and tools
  apt:
    name:
      - dstat
      - openjdk-8-jdk
      - openjdk-8-jdk-headless
      - krb5-user
      - git
    state: latest
    update_cache: yes

- name: Copy krb5.conf
  template:
    src: krb5.conf.j2
    dest: /etc/krb5.conf
    owner: root
    group: root
    mode: '0644'
    backup: no

코드를 변경하고 정상적으로 설치가 진행되었다!

 

2) 주키퍼 & 카프카 설치

책의 설명대로 주키퍼와 카프카를 설치한다.

실습 파일을 뜯어보면 간단한 코드니까

저자를 위해서 해당 코드는 공개하지 않는다!

 

주키퍼 설치완료!
카프카 설치 완료!

2-3. 카프카 맛보기

2장의 마지막에는 카프카 토픽을 생성하고

컨슈머와 프로듀서를 실행해 간단한 실습을 수행하는 부분이 나와있다.

정말 간단하니까 실습을 해보는 것을 추천하고

마지막은 내가 실습했던 사진을 첨부한다.

 

마지막으로 내가 참고했던 글들을 가져왔다.

 

실시간 처리에 대해서 관심이 있었던지라 카프카 스터디에 참여해 실시간 데이터 수집에 대해 공부하기 시작했다.

작성할 내용들은 카프카 스터디를 통해서 알게 된 내용들을 적고 실습한 내용을 같이 채우고자 한다.

1장 카프카 개요

카프카의 도입 사례, 주요 특징, 성장에 대해서 가볍게 짚고 넘어간다.

조금씩 뜯어보면서 어떤 부분이 중요한지 살펴보자

 

1-1. 카프카 도입 사례 및 이용 현황

책에서는 잘란도라는 기업(처음 들어봤다..)과 트위터의 도입 사례를 설명한다.

잘란도는 독일의 무신사(?) 같은 느낌의 기업이라고 한다. 궁금해서 웹 페이지를 들어가 봤는데..

그린 고블린 형님께서..!

(여튼 트위터는 X로 바뀌고.. 다들 많이 아니까 패스!)

 

잘란도의 도입배경은 이러하다.

 

'데이터 변화가 스트림으로 컨슈머에 전달되는 이벤트 드리븐 시스템으로의 전환'

 

이를 목적으로 여러 시도들을 진행했는데..!

바운드 아웃바운드 데이터의 일치성 검증, 통신 방법에 대한 선택과 같은 다각적 고민 
->

동기화 방식의 CRUD를 채택했으나, 한계점에 봉착했다. 이유는 다양한 클라이언트들의 요구사항을 효율적으로 지원하기 어렵다는 것.

빠른 전송을 위한 클라이언트 또는 대량의 배치 전송을 위한 클라이언트를 지원하기 어려움

 

위와 같은 문제들에 봉착하고 말았다. 그래서 꺼내든 것은 바로 카프카! 

그 이유들은 카프카의 주요 특징들에 담겨있으니 아래에서 한 번에 설명하고자 한다.

1-2. 카프카 주요 특징

높은 처리량과 낮은 지연시간

카프카는 매우 높은 처리량과 낮은 지연시간을 자랑한다고 한다.

 

다른 MQ들과 비교했는데..

래빗 MQ의 경우 응답속도가 가장 빠르나, 처리량이 늘어나면 카프카가 독보적이라고 한다.

펄사의 경우는 서버 간의 메시징을 위한 멀티테넌트 고성능 솔루션이라고..(?)

(GPT:티 테넌트(Multi-tenant)는 소프트웨어 아키텍처 모델로,
여러 고객(테넌트)이 단일 소프트웨어 인스턴스를 공유하는 방식을 말합니다. )

 

추가로 관련 자료를 가져왔다.

카프카, 펄사, 래빗 MQ 비교: https://www.confluent.io/blog/kafka-fastest-messaging-system/

 

Benchmarking RabbitMQ vs Kafka vs Pulsar Performance

A complete benchmark of RabbitMQ, Kafka, and Pulsar to determine performance, throughput, and latency at scale. View the comparison results!

www.confluent.io

Apache Pulsar 소개: https://devocean.sk.com/blog/techBoardDetail.do?ID=164597&boardType=techBlog

 

Open Source 기반 Messaging Platform - Apache Pulsar 소개

 

devocean.sk.com

 

높은 확장성

카프카는 손쉬운 확장이 가능하도록 설계되었다고 한다.

프로듀서와 컨슈머를 생성해서 넣으면 되니까..?라고 생각한다.

여튼 링크드인에서는 확장이 필요서 해당 부분을 고려해 설계했다고 한다.

 

고가용성

클러스터 내 리플리케이션 기능을 통해서 고가용성을 확보했다.

 

내구성

acks옵션을 이용해서 메시지 내구성을 강화했다.

 

개발편의성, 운영 및 관리의 편의성

프로듀서와 컨슈머가 완벽하게 분리되어 동작해 원하는 부분만 개발해 사용가능하다.

또한 개발 편의성을 위해 카프카 커넥트와 스키마 레지스트리를 지원한다.

 

 

자..

마지막으로 카프카는 Apache Kafka와 Confluent 카프카가 있는데 이를 비교한 글이 컨플루언트에 있어서 가져와보았다.

https://www.confluent.io/ko-kr/apache-kafka-vs-confluent/

 

Apache Kafka vs. Confluent: 특징 및 기능 비교 | KR

Kafka and Confluent have numerous differences. Here's a side-by-side comparison of Confluent vs Kafka: features, connectors, clients, performance, scalability, and more.

www.confluent.io

 


책을 읽으면서 제로카피, 이벤트 버스 패턴, 람다 아키텍처와 같이 기존에 알지 못했던 지식들이 나와
CS공부를 함에 있어서도 많은 도움이 되리라 생각한다.

 

이번 기회로 카프카를 공부해 보고 실제 환경에서 데이터를 가져오는 방법으로 카프카를 고려할 수 있는 역량을 길러보고자 한다.

'Data Engineering > kafka' 카테고리의 다른 글

kafka > 실전 카프카 개발부터 운영까지 2장  (3) 2024.10.15

+ Recent posts