generated from Learning-Is-Vital-In-Development/study-template
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
53 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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는 커넥터 구현과 무관하게, 카프카에 서로 다른 형식의 데이터를 저장할 수 있도록 해준다. |