kwang23
2024. 2. 8. 19:55
2024. 2. 8. 19:55
카프카 커넥트는 언제 사용하나?
- 카프카를 직접 코드나 API를 작성하지 않았고, 변경도 할 수 없는 데이터 저장소에 연결시켜야 하는 경우
카프카 커넥트의 구성
- Worker
- 커넥터와 태스크를 실행시키는 역할
- 커넥터 설정을 내부 토픽에 저장
- 적절한 설정값 전달
- 소스와 싱크 커텍터의 오프셋 커밋
- 문제 발생시 재시도
- REST API, 설정관리, 신뢰성, 고가용성, 규모 확장성, 부하 분산 담당
- 워커 프로세스의 장애 또는 신규 추가
- 커넥터 클러스트안의 다른 워커들이 감지
- 해당 워커에서 실행중이던 커넥터와 태스크를 다른 워커에 할당
- 커넥터 플러그인
- 커넥터 API 구현
- Connector
- 커넥터에서 몇 개의 태스크가 실행되어야 하는지 결정
- 데이터 복사 작업을 각 태스크에 어떻게 분할해 줄지 결정
- 워커로부터 태스크 설정을 얻어와서 태스크에 전달
- Task
- 데이터를 실제로 카프카에 넣거나 가져오는 작업 담당
- 워커로부터 컨텍스트를 받아서 초기화
- 소스 태스크
- 소스 레코드의 오프셋을 저장할 수 있게 해주는 객체 포함
- 외부 시스템을 폴링해서 워커가 카프카 브로커로 보낼 레코드 리스트 리턴
- 싱크태스크
- 카프카로부터 받는 레코드를 제어할 수 있게 해주는 메소드들 포함
- 워커를 통해 카프카 레코드를 받아서 외부 시스템에 쓰는 작업 담당
- Data API
- 소스 커넥터에서 데이터 객체를 어떻게 생성할지에 대한 방법을 알려줌
- Converter
- 소스 커넥터에서 카프카에 데이터를 어떻게 쓸지에 대한 방법을 알려줌
- 카프카에서 데이터를 읽어 컨버터를 통해 데이터 API 레코드로 변환하여 싱크 커넥터로 전달
- 기본 데이터 타입, 바이트 배열, 문자열, Avro, Json, 스키마 있는 JSON, Protobuf 사용가능
- 오프셋 관리
- 소스커넥터
- 커넥터가 워커에 리턴하는 레코드에 논리적인 파티션과 오프셋 포함
- 파일 인경우, 파일이 파티션, 파일안의 줄 또는 문자 위치가 오프셋
- JDBC의 경우, 테이블이 파티션, 테이블의 레코드 id/timestamp 가 오프셋
- 싱크커넥터
- 토픽, 파티션, 오프셋 식별자가 포함되어 있는 카프카 레코드를 읽은 뒤 대상 시스템에 저장
- 성공하면 오프셋 커밋