uber에서 Kafka multi-region 관련 글이 올라와 나름 요약해봤습니다.
오프셋 매핑 테이블 아이디어는 재밌네요.
편하게 댓글 달아주세요.
https://eng.uber.com/kafka/
------요약------
Kafka는 Uber에서 굉장히 중요한 기술 스택으로 자리 잡고 있다. "cornerstone"
하루에 수 petabyte, 1조 개 이상의 메시지가 처리되고 있다.
1. Multi-region Kafka at Uber
Kafka 가용성을 보장하기 위해 Multi-region으로 구성하는데 한 Region에는 두개 타입의 클러스터로 구성한다.
하나는 한 Region의 producer가 publish 되는 "Region Clusters", Region cluster 간의 메시지를 복사한 "Aggregated Clusters"가 있다.
각 region의 producer는 동일한 region의 Cluster에 publish 하고 만약 장애가 나면 다른 region의 "Region Clusters"로 publish 한다.
uReplicator를 이용하여 "Region clusters"의 메시지를 "Aggregated clusters"로 복사한다.
2. Consuming from multi-region Kafka clusters
multi-region의 consumer는 producer보다 복잡하다. Multi-region Kafka는 두 개의 all-activeness를 지원한다.
2-1. Active/active consumption
active/active란 각 region 별 동일한 토픽에 대해 동일한 작업을 수행한다.
※ dynamic pricing service, all-active service, Update service 팍! 이해 되지 않아 썼다 지웠어요;;
혹시 원문 보시고 아시는 분 계시면 댓글 달아주세요.
2-2. Active/passive consumers
primary region의 consumer(active consumer)만 "Aggregated cluster"에서 consume 하는 구조다.
consumer offset을 주기적으로 다른 region에 복사 한다. primary region이 박살 나면 다른 region의 consumer가 다시 consume을 진행한다.
여기서 offset 정보의 동기화가 매우 중요하다.
데이터 유실을 방지하기 위해 high watermark에서 시작하면 안 되고 너무 많은 중복 처리를 방지하기 위해 low watermark에서 시작하면 안 된다.
또한 "Aggregated clusters"는 복사하는 구간의 network latency로 인해 순서가 바뀌는 경우도 고려해야 한다.
Figure 4b: 그래서 uReplicator에서 복사를 하는 Region offset과 Aggregated offset 매핑 테이블(checkpoint)을 저장 및 관리하는 서비스(offset manager service)를 개발하였다.
테이블 첫 번째 row를 보면 A-region "Region cluster" offset 1이 A-region "Aggregated cluster" offset 1에 매핑됨을 의미한다.
active consumer가 실패하면 다른 region의 consumer는 offset manager service에서 최근 offset을 가져온 후 진행한다.
Figure 6: passive consumer가 최근 offset을 가져오는 방법
active consumer가 B-region의 offset 6 처리하다 장애 발생했다고 가정
* 테이블 기준 dist-cluster가 B-region이며 src-cluster가 A, B인 최신의 checkpoint 찾음. (처리중 인 offset이 6이니 테이블 기준 6번째 줄이 B-region, 4번째 줄이 A-region)
* A-region "Region clusters" offset 1, B-region "Region cluster" offset 3인 것 확인
* 위에서 찾은 1, 3 기준 A-region의 "Aggregated clusters"에 해당하는 최신 checkpoint 찾음. (테이블에서 첫번째 줄과 일곱번째 줄 해당)
* A-region "Aggregated clusters"는 offset 1, 7 인것 확인
* 둘 중 가장 작은 1 offset부터 passive consumer 시작
* A2, B1, B2 메시지는 중복 처리
'최신기술 포스팅 링크' 카테고리의 다른 글
Kafka Operations(Production Deployment) (0) | 2021.01.19 |
---|---|
Java Stream Collector 반쪽짜리 스트림을 쓰던 그대에게. Advanced Stream! (0) | 2021.01.19 |
Kubernetes 클러스터에 배포할 애플리케이션의 로컬 개발을 쉽게 해줄 Telepresence (0) | 2021.01.19 |
Kafka와 MongoDB, Kubernetes로 유연하고 확장 가능한 LINE 쇼핑 플랫폼 구축하기 (0) | 2021.01.19 |
HikariCP 는 왜 나를 물먹이는가… (0) | 2021.01.19 |
CDK8s를 이용하여 쿠버네티스 애플리케이션을 정의하고 관리하기 (0) | 2021.01.19 |
성능 테스트 결과에 따라 비용을 고려하여 적절한 서버 구조 설계 과정 (0) | 2021.01.19 |
JVM 내부 동작 원리 & 자바 컴파일,실행 순서 - 런타임 영역, JIT 컴파일러, 인터프리터 (0) | 2021.01.19 |