일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- notification
- NoSQL
- 웹사이트 성능
- nginx
- 레디스
- 웹사이트성능
- php
- APNS
- kafka
- nginx설정
- 푸시
- GCM
- git
- nginx설치
- Java
- 카프카 트랜잭션
- 자바스크립트
- 페이스북 번역
- 푸시 번역
- 디자인패턴
- redis
- Push
- 성능
- GCM 번역
- gcm 푸시 번역
- Design Pattern
- 카프카
- JPA
- 웹사이트최적화기법
Archives
- Today
- Total
간단한 개발관련 내용
카프카 트랜잭션 동작원리 본문
반응형
1. 카프카 트랜잭션의 목적
- Exactly-once semantics (EoS): 메시지를 정확히 한 번만 처리.
- 프로듀서-컨슈머 간 원자적 작업:
- 데이터 생산(프로듀서) 및 소비(컨슈머)를 원자적으로 연결.
- 데이터 무결성:
- 장애 발생 시 중복 메시지 방지 및 데이터 일관성 유지.
2. 카프카 트랜잭션의 주요 구성 요소
transactional.id
:- 트랜잭션을 구분하는 고유 ID.
- 프로듀서는
transactional.id
를 기반으로 트랜잭션 작업을 수행.
- Producer ID (PID):
- 프로듀서 인스턴스에 부여되는 고유 ID.
- 브로커는 PID를 통해 트랜잭션 상태를 관리.
- Epoch:
- 트랜잭션 버전 관리.
- 장애 복구 시 동일한
transactional.id
로 중복 작업 방지(팬싱).
- 트랜잭션 로그:
- 브로커는 트랜잭션 상태(시작, 커밋, 중단 등)를 로그로 기록.
- 복구 시 해당 로그를 참조해 트랜잭션 일관성을 보장.
3. 트랜잭션 작동 과정
- 트랜잭션 초기화:
- 프로듀서가
initTransactions()
호출. transactional.id
를 브로커에 등록하고 PID와 Epoch를 받음.
- 프로듀서가
- 트랜잭션 시작:
beginTransaction()
호출로 트랜잭션 범위 시작.
- 데이터 전송:
- 프로듀서가 메시지를 브로커에 전송(
send()
)하며, 메시지는 트랜잭션에 포함됨.
- 프로듀서가 메시지를 브로커에 전송(
- 트랜잭션 커밋/중단:
- 커밋:
commitTransaction()
호출.- 트랜잭션 로그에 커밋 상태 기록.
- 메시지가 컨슈머에게 공개됨.
- 중단:
abortTransaction()
호출.- 트랜잭션 로그에 중단 상태 기록.
- 메시지는 삭제되거나 숨겨짐.
- 커밋:
- 컨슈머 일관성:
- 컨슈머는
read_committed
모드로 설정 시 커밋된 메시지만 읽음. - 중단된 트랜잭션의 메시지는 무시.
- 컨슈머는
4. 카프카 트랜잭션의 특징
- 원자성:
- 여러 파티션 및 토픽에 걸친 작업도 원자적으로 처리.
- 일관성:
- 트랜잭션 로그를 통해 데이터 정합성 보장.
- 격리성:
read_committed
를 통해 중단된 메시지를 숨김.
- 내구성:
- 장애 복구 시 트랜잭션 상태를 복원.
Chandy-Lamport Snapshot Algorithm
1. Chandy-Lamport 알고리즘이란?
- 분산 시스템에서 글로벌 상태를 캡처하기 위한 알고리즘.
- 각 프로세스와 통신 채널의 상태를 기록하여 일관된 스냅샷 생성.
2. 알고리즘의 목적
- 글로벌 상태 추적:
- 분산 시스템에서 프로세스 간의 상태 및 메시지 전달 상태를 기록.
- 무결성 보장:
- 정확하고 일관된 스냅샷으로 분산 시스템의 복구 및 분석.
3. 작동 원리
- 스냅샷 시작:
- 특정 프로세스가 스냅샷을 시작(마커 메시지 전송).
- 스냅샷 저장:
- 프로세스는 자신의 현재 상태를 기록.
- 처음 마커 메시지를 받은 후부터 해당 채널의 메시지를 기록(채널 상태).
- 마커 메시지 전달:
- 각 프로세스는 연결된 모든 채널에 마커 메시지를 전송.
- 스냅샷 완료:
- 모든 채널에서 마커 메시지를 수신하면 스냅샷 완료.
4. 주요 개념
- 프로세스 상태:
- 프로세스가 특정 시점에서 가지고 있는 데이터.
- 채널 상태:
- 마커 메시지를 받기 전 해당 채널에 도착한 모든 메시지.
- 일관된 스냅샷:
- 모든 프로세스와 채널의 상태를 포함하며, 메시지 손실 없이 정확히 반영.
5. Chandy-Lamport의 전제 조건
- FIFO (First In, First Out) 채널:
- 메시지가 전송된 순서대로 도착해야 함.
- 통신 채널 신뢰성:
- 메시지가 손실되지 않고 도착해야 함.
카프카 트랜잭션과 Chandy-Lamport의 연관성
- 일관성 보장:
- 카프카 트랜잭션은 트랜잭션 로그를 통해 메시지 일관성을 보장하며, Chandy-Lamport는 분산 시스템의 글로벌 상태를 캡처.
- 분산 처리:
- 카프카는 다중 브로커 환경에서 트랜잭션 관리, Chandy-Lamport는 다중 프로세스 상태 기록.
- 복구 및 재처리:
- 카프카의 트랜잭션 로그와 Chandy-Lamport의 스냅샷은 장애 복구에 활용.
요약
- 카프카 트랜잭션은 메시지 처리의 원자성, 일관성, 내구성을 보장하기 위한 메커니즘으로, 팬싱과 트랜잭션 로그를 통해 데이터 무결성을 유지.
- Chandy-Lamport 알고리즘은 분산 시스템의 글로벌 상태 캡처를 위한 기법으로, 일관된 상태 기록과 장애 복구를 가능하게 함.
반응형