Skip to content

Commit

Permalink
Create 9장-정리.md (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
choihuk authored Aug 12, 2024
1 parent 07de8c2 commit bc7a538
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions choi/9장-정리.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 9장-데이터 파이프라인 구축하기

## 데이터 파이프라인 구축 시 고려사항

- 적시성: 하루에 한 번 데이터를 받는 시스템이나 데이터가 생성된 뒤 몇 밀리초 안에 받아야 하는 시스템 등 여러 시스템에 적시에 변경이 쉽도록 구현해야 한다. 이러한 맥락에서 카프카는 쓰는 쪽과 읽는 쪽 사이의 시간적 민감도에 대한 요구조건을 분리시키는 거대한 버퍼이다.
- 신뢰성: 카프카는 트랜잭션 모델이나 고유 키를 지원하는 외부 데이터 저장소와 결합됐을 때 정확히 한 번 까지도 보장이 가능하다.
- 높으면서도 조정 가능한 처리율: 카프카는 높은 처리율을 받아낼 수 있는 분산 시스템이다.
- 데이터 형식: 카프카 자체와 커넥트 API는 데이터 형식이 완전히 독립적이기에 카프카에 사용하는 데이터 형식이 무엇이든 간에 사용할 수 있는 커넥터는 영향을 받지 않는다.
- 변환
- ETL: 추출-변환-적재의 줄임말이며, 데이터 파이프라인이 통과하는 데이터에 변경을 가하는 작업까지 담당한다. 데이터를 수정하여 저장하기에 시간과 공간을 절약하지만, 수정 전 데이터가 저장되지 않기에 해당 데이터를 접근하고 싶으면 전체 파이프라인을 다시 만들어야 한다.
- ELT: 추출-적재-변환의 줄임말로, 데이터 파이프라인은 대상 시스템에 전달되는 데이터가 원본 데이터와 최대한 비슷하도록 최소한의 변환만을 수행한다. ETL과 비교하여 대상 시스템의 CPU와 자원을 잡아먹는다는 단점이 있다.

## 카프카 커넥트 vs 프로듀서/컨슈머

- 카프카 클라이언트는 애플리케이션의 코드를 변경할 수 있으면서 카프카에 데이터를 쓰거나 데이터를 읽어오고 싶을 때 쓴다.
- 카프카 커넥트는 직접 코드나 API를 작성하지 않았고, 변경도 할 수 없는 데이터 저장소에 카프카를 연결시켜야 할 때 쓴다.
- 카프카 커넥트를 사용하려면 연결하고자 하는 데이터 저장소에 맞는 커넥터가 필요한데, 요즘은 많은 커넥터가 나와있다.
- 만약 커넥터가 없다면 카프카 클라이언트나 커넥트 API를 사용하여 애플리케이션을 직접 작성할 수 있다.

## 카프카 커넥트

- **커넥트**: 커넥터 플러그인을 개발하고 실행하기 위한 API와 런타임을 제공한다. 여러 워크 프로세스들의 클러스터 형태로 실행된다. 사용자는 워커에 커넥터 플로그인을 설치한 뒤 REST API를 사용해서 커넥터별 설정을 잡아주거나 관리해주면 된다.
- **커넥터 플러그인**: 카프카 커넥트가 실행시키는 라이브러리로, 데이터를 이동시키는 것을 담당한다.
- 커넥터는 대용량의 데이터 이동을 병렬화해서 처리하고 워커의 유휴 자원을 더 효율적으로 활용하기 위해 태스크를 추가로 실행시킨다.
- **소스 커넥터 태스크**: 원본 시스템으로부터 데이터를 읽어와 커넥트 자료 객체의 형태로 워커 프로세스에 전달
- **싱크 커넥트 테스크**: 워커로부터 커넥트 자료 객체를 받아 대상 시스템에 쓴다.
- 카프카 커넥트는 자료 객체를 카프카에 쓸 때 사용되는 형식을 바꿀 수 있도록 컨버터를 사용한다.

## 카프카 커넥트 자세히 알아보기

### 커넥터

- 커넥터에서 몇 개의 태스크가 실행되어야 하는지 결정한다.
- 데이터 복사 작업을 각 태스크에 어떻게 분할해 줄지 결정한다.
- 위커로부터 태스크 설정을 얻어와서 태스크에 전달해준다.

ex) JDBC 소스 커넥터는 db 연결 후 복사할 테이블을 찾고 그 결과를 근거로 몇개의 태스크를 실행시킬 지 결정하고, 각 태스크에 전달할 설정을 생성한다.

### 태스크

- 데이터를 실제로 카프카에 넣거나 가져오는 작업을 담당한다.
- 모든 태스크는 워커로부터 컨텍스트를 받아서 초기화된다.

### 워커

- 워커 프로세스는 커넥터 설정을 내부 카프카 토픽에 저장하고, 커넥터와 태스크를 실행시키고, 적절한 설정값을 전달해주는 역할을 한다.
- 워커 프로세스가 정지하거나 크래시 날 경우, 커넥트 클러스터 안의 다른 워커들이 이것을 감지해서 해당 워커에서 실행중이던 다른 워커들이 이것을 감지해서 모든 워커 간에 부하가 균형이 잡히도록 커넥터와 태스크를 할당해준다.

### 컨버터 및 커넥트 데이터 모델

- 소스 커넥터는 원본 시스템의 이벤트를 읽어와서 Schema, Value 순서쌍을 생성하고, 싱크 커넥터는 Schema, Value 순서쌍을 받아온 뒤 Schema를 사용해서 해당 값을 파싱하고, 대상 시스템으로 쓴다.
- 컨버터는 소스 커넥트가 가져온 데이터를 카프카에 저장할 때나 싱크 커넥트가 카프카에 저장된 데이터를 읽어와 커넥트 데이터 API 레코드로 변환할 때 사용된다.
- 컨버터를 사용함으로써 커넥트 API는 커넥터 구현과 무관하게, 카프카에 서로 다른 형식의 데이터를 저장할 수 있도록 해준다.

0 comments on commit bc7a538

Please sign in to comment.