분류 전체보기

· 오픈소스
CDC 작업을 수행할 때 Flink CDC 라이브러리를 사용하면 얻게되는 장점은 parallelism을 2이상으로 높일 수 있다는 것입니다.반면 Debezium 기반 Kafka Connect는 단일 태스크로만 동작하기 때문에 병렬성(tasks.max)가 1로 고정되는 단점이 존재합니다. 그런데 문득 Flink CDC도 내부적으로 Debezium을 사용하는데 왜 Flink CDC는 병렬 소싱이 가능하고, Kafka Connect는 불가능한지 구조적인 차이가 궁금해 조사해보았습니다. 결론부터 말하면, 차이의 핵심은 Debezium 자체가 아니라 그 위에 올라가는 실행 프레임워크(Kafka Connect vs Flink)의 아키텍처에 있습니다. Debezium 기반 Kafka Connect - 병렬성이 1인 ..
· 오픈소스
Apache Flink에서 주로 State Backend로 사용되는 RocksDB는 쓰기 속도가 빠르다고 알려져 있는데요, 그 동안 왜 빠른지에 대해서는 한 번도 찾아본 적이 없어 찾아보게 되었습니다.정답부터 말하면 LSM Tree(Log-Structured Merge-Tree)를 선택했기 때문입니다. 이 글에서는 LSM Tree의 아키텍처와 동작 원리를 1996년 원본 논문을 기반으로 살펴보고, 이후 Flink에서 이걸 어떻게 활용하는지 간단히 정리합니다. 1. 왜 LSM Tree가 필요했을까?B-Tree의 쓰기 비용 문제LSM Tree를 이해하려면 먼저 B-Tree의 한계를 알아야 합니다.1996년 Patrick O'Neil 등이 발표한 원본 논문 "The Log-Structured Merge-Tre..
· 오픈소스
Debezium 기반의 CDC(Change Data Capture) 파이프라인을 운영하다 문득 다음과 같은 섬뜩한 의문이 들었습니다.소싱하는 DB의 CASCADE가 발생하는 경우 변경 이벤트 감지를 할 수 있을까?결론은 Debezium 자체는 CASCADE에 대해서 어떠한 처리도 하지 않습니다. 하지만 소싱 DB의 이벤트 저장 방식에 따라 변경 이벤트는 유실될 수도, 안될 수도 있습니다.이 글에서는 MySQL, PostgreSQL, MongoDB 3개 DB에서 Debezium이 cascade를 어떻게 처리하는지를 확인해 보았습니다.1. MySQL - Binlog에서 CASCADE를 표현하는 방식InnoDB FK CASCADE의 내부 동작MySQL InnoDB에서 FK CASCADE가 동작하는 흐름은 다음..
· 오픈소스
의문의 시작Flink CDC의 MySQL snapshot은 청크 단위로 SELECT문을 이용해 데이터를 복사하고, SHOW MASTER STATUS문을 이용해 GTIDs 값을 기록합니다.이후 binlog streaming 단계로 전환할 때, 모든 청크의 GTIDs 값 중 가장 낮은(오래된) 값부터 binlog event를 읽기 시작합니다. 이걸 보는데 문득 이런 생각이 들었습니다.snapshot에서 이미 가져온 데이터가 binlog에서 다시 나와서, sink가 upsert 모드가 아니면 중복 insert가 쌓이는 것 아닐까?결론부터 말하면, 중복은 발생하지 않았습니다.Flink CDC는 Netflix의 DBLog 논문에 기반한 2단계 중복 방지 메커니즘을 갖고 있기 때문입니다.아래는 그 과정을 설명합니다..
1. 개요Flink CDC 파이프라인은 "재처리"를 피할 수 없다. 분산 스트리밍 시스템은 이론적으로는 아름답지만, 현실은 변수가 많습니다. 소싱하는 Kafka 토픽의 파티션이 갑자기 늘어나고, 노드가 OOM으로 죽고, 디스크가 가득 차고, GC로 인해 타임아웃이 발생할 수 있습니다. Apache Flink 기반의 CDC 파이프라인도 마찬가지입니다.현시점 기준으로 스트리밍 파이프라인 중 운영 환경에서 장애를 고려하지 않은 시스템은 아마 없을 것이라 생각합니다. Flink는 이러한 장애에 대응하기 위해 체크포인트(Checkpoint) 메커니즘을 제공하고 있습니다. 주기적으로 스트림 처리 상태를 스냅샷으로 저장하고, 장애 발생 시 마지막으로 성공한 체크포인트로부터 복구합니다. 단, 이번 포스팅에서 이야기하고..
· 오픈소스
https://github.com/apache/flink-cdc/pull/4277 [FLINK-39055] [Iceberg] Support default column values in Iceberg sink connector by suhwan-cheon · Pull Request #4277 · apache/Summary In the Iceberg table version 3, default value support for columns https://iceberg.apache.org/spec/#version-3-extended-types-and-capabilities Add default column value support for Iceberg...github.com Iceberg 1.8.0부터 소개된..
https://iceberg.apache.org/spec/?h=deletion+vec Spec - Apache Iceberg™Iceberg Table Spec This is a specification for the Iceberg table format that is designed to manage a large, slow-changing collection of files in a distributed file system or key-value store as a table. Format Versioning Versions 1, 2 and 3 of the Iceberg siceberg.apache.orgIceberg table format version 3에 소개된 Deletion Vectors 기..
OLAP(Online Analytical Processing) 시스템의 가장 기본적인 컴포넌트 구조는 위와 같이 정리할 수 있습니다.가장 기초적인 컴포넌트부터 알아봅시다. StorageOLAP은 기본적으로 방대한 데이터를 저장하고, 분석하는 것을 목표로 합니다.만약 아주 적은 데이터라면 굳이 OLAP을 쓸 필요 없이 OLTP로 트랜잭션, 분석을 동시에 해도 상관 없기 때문입니다. OLAP에서 사용하는 스토리지는 이런 선택지가 있습니다.로컬 파일 시스템분산 파일 시스템 (HDFS)객체 스토리지 (S3)또한 저장 방식의 유형과 관련해, 행 지향(Row-oriented) 데이터베이스와 열 지향(Columnar) 데이터베이스를 사용할 수 있습니다.최근에는 열 지향 데이터베이스가 방대한 양의 데이터를 처리할 때 ..
· 오픈소스
https://github.com/apache/flink-cdc/pull/4249 [FLINK-38985][docs] Add documentation for VARIANT type and PARSE_JSON functions by suhwan-cheon · Pull Request #4249 · apache/Summary Add documentation for VARIANT type support and PARSE_JSON/TRY_PARSE_JSON functions introduced in recent PRs. (in https://issues.apache.org/jira/browse/FLINK-38874 issue - sub tasks) Notes ...github.com Flink 2.1.0에서 반정..
· 오픈소스
Issuehttps://issues.apache.org/jira/browse/FLINK-38247 [FLINK-38247] MySqlChunkSplitter may continuously generate splits when using BIGINT UNSIGNED as primary key - ASF JiraMySqlChunkSplitter may continuously generate splits when using BIGINT UNSIGNED as primary key, The following log illustrates this point: 2025-08-12 18:10:37,885 INFO org.apache.flink.cdc.connectors.mysql.source.assigners.MySq..
· 독서
책https://www.yes24.com/product/goods/152644797 시대예보: 경량문명의 탄생 | 송길영 | 교보문고 - 예스24거대함은 더 이상 안전을 보장하지 않는다.가볍고 빠르게 적응하는 조직과 개인만이 살아남는 ‘경량문명’의 탄생을 선언합니다.지금 우리 사회의 화두 중 하나는 ‘희망퇴직’이다. 몇 년 전www.yes24.com책은 이런 책 😄선정 이유는 최근에 많이 들어본 베스트셀러여서.. 일단 책이란 걸 읽어보자 싶어 가져왔다.앞선 시리즈가 있지만 읽으면서 전작들과 크게 연결성이 있다고 느끼진 못했다.시대의 흐름을 알려주는 시리즈의 특성상 일단 가장 최신 작을 읽어보고 맘에 든다면 그 이전 것들도 보는 것을 추천한다. 배경 설명책에 나오는 새로운 어휘들에 대한 설명 겸 컨텍스트..
· 독서
2026년 새해 목표 중 하나로 한 달에 한 권 책 읽고 내 생각 정리하기를 세웠다. 이런 계획을 세운 이유는 여러 가지가 있다.첫 번째는 그 동안 책을 너무 안 읽다보니 스스로에게 일상생활에서의 문장력이 떨어진 것 같다는 느낌이 들었고두 번째는 유튜브, 넷플릭스 등 다른 사람이 생각하고 만든 편집물을 필터링 없이 보다보니 정작 내 생각이 무엇인지 모르겠다.세 번째는 AI가 일상화되면서 앞의 것들이 앞으로 더 심해질 것이라는 확신이 들었다. 그래서 한 달에 한 권이라도 책을 읽으면서 내가 느낀 생각들을 조잘조잘 적어볼 생각이다.(이번엔 진짜 꾸준히 작성할거다.. 😅) 앞으로 적을 내용들은 단순히 책 내용을 요약한 정리본이 아닌 책 내용을 기반으로 내가 어떤 생각을 했는지를 기록한다.이 글을 공개적인 곳..
suhwanc
'분류 전체보기' 카테고리의 글 목록