본문 바로가기

kafka4

[Transactional Outbox] CDC 기반의 transaction log tailing 구현 [Transactional Outbox] 개요 에서는 Transactional Outbox pattern에 대한 이론적인 부분을 살펴보았다.이번 포스팅에서는 실제로 CDC를 사용하여 transaction log tailing 방식을 구현하는 예제에 대해 살펴보도록 하겠다. (전체 코드는 여기에서 확인할 수 있다) 개요다음과 같은 아키텍처의 Transactional Outbox pattern을 구현한다. 동일한 transaction 내에서 서비스 데이터 업데이트와 도메인 이벤트 데이터 저장을 한다.CDC를 통해 DB에 도메인 이벤트 데이터가 추가되었음을 감지하고, '데이터 추가됨 이벤트'를 Kafka topic으로 발행한다.2 에서의 '데이터 추가됨 이벤트' message를 가져온 다음, 이를 도메인 이벤.. 2024. 11. 25.
Kafka Partition key를 사용하여 데이터 순서대로 처리하기 Kafka에서 하나의 Topic은 여러 Partition으로 파티셔닝 될 수 있다. 하나의 Partition은 동일한 Consumer Group 내에서 하나의 Consumer에 의해 처리되기 때문에, Partition의 개수를 늘려 Consumer Group에 대해 하나의 Topic에 대한 처리량을 늘릴 수 있다. (참고: Can multiple Kafka consumers read the same message from a partition?) (* 하지만 Partition을 무조건 늘리는건 좋지 않다 - 참고: How to Choose the Number of Topics/Partitions in a Kafka Cluster?) Topic의 어느 Partition에 적재될지는 publish 할 때 p.. 2023. 1. 12.
Kafka의 정확히 한 번 전달(exactly-once delivery) 분산 시스템 환경에서는 특히 EDA(Event-Driven Architecture)를 갖는 시스템 환경이라면 Message Broker를 사이에 두고 각 서비스가 메세지를 주고 받을 것이다. 이러한 아키텍처는 결합도를 낮추는 측면에서 엔지니어링에 장점을 갖지만 그와 동시에 여러가지 풀기 힘든 숙제들이 생기게된다. 분산 시스템에서는 오직 2가지 문제 밖에 없다. 2. 정확히 한 번 전달 1. 보장된 메세지 순서 2. 정확히 한 번 전달 이 글에서 말하고 싶은 내용은 Exactly-once delivery, 즉 정확히 한 번 전달이다. 분산 시스템 환경에서는 정확히 한 번 전달은 불가능하다라는 주장의 글이 있다. https://bravenewgeek.com/you-cannot-have-exactly-once.. 2022. 3. 19.
Docker Compose를 사용하여 Kafka 셋업하기 코드는 여기 참고 1개의 Zookeeper와 3개의 Kafka broker를 갖는 Cluster version: '3.6' services: zoo1: image: confluentinc/cp-zookeeper:6.2.1 container_name: cluster-zoo1 hostname: zoo1 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_SERVER_ID: 1 ZOOKEEPER_SERVERS: zoo1:2888:3888 kafka1: image: confluentinc/cp-kafka:6.2.1 container_name: cluster-kafka1 hostname: kafka1 ports: - "9092:9092".. 2022. 1. 28.