728x90
도입
오늘도 돌아온 지우.
지우는 욕심쟁이라 피카츄 백만볼트, 잠만보 휴식, 피카츄 상처 치료, 피카츄 몸통박치기를 한큐에 끝내고 싶은데, 만약 한턴에 4동작을 하는 게 실패한다면, 위험해 질 수 있어, 그냥 모두 없었던 일로 하고 싶다.
트랜잭션 프로듀서
카프카에서 트랜잭션은 다수의 파티션에 데이터를 저장할 경우 모든 데이터에 대한 동일한 원자성(atomic)을 만족시키기 위해 사용된다. 원자성을 만족시킨다는 의미는 다수의 데이터를 동일 트랜잭션으로 묶음으로써 전체 데이터를 처리하거나 전체 데이터를 처리하지 않도록 하는 것을 의미한다.
트랜잭션 프로듀서는 데이터를 파티션에 저장할 뿐 아니라, 트랜잭션의 시작과 끝을 표현하기 위해 트랜잭션 레코드(커밋)를 한 개 더 보낸다.
이를테면 이렇게, 명령이 다 끝났다, 명령이 이렇게 묶인다는 표식으로 커밋 레코드로 꽝꽝 찍어주는 거다.
트랜잭션 컨슈머
트랜잭션 컨슈머는 커밋 도장이 꽝꽝 찍혔을 때만
트랜잭션 컨슈머는 저장된 커밋 레코드를 보고, 트랜잭션이 완료되었음을 확인하고 명령 데이터를 받는다.
트랜잭션 프로듀서 설정 코드
프로듀서별로 고유한 ID 값을 가져야함(randomUUID를 통해 랜덤값으로 지정할 수도 있음)
configs.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, UUID.randomUUID());
Producer<String, String> producer = new KafkaProducer<>(configs);
트랜잭션 컨슈머 설정 코드
isolation.level 옵션을 read_commited로 설정해야함. uncommited 옵션의 경우 트랜잭션 커밋 여부와 관계없이 모두 읽음.
configs.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, "read_commited");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(configs);
'DevOps > Kafka' 카테고리의 다른 글
Java-Gradle Kafka 환경 설정하기 (1) | 2025.01.22 |
---|---|
Mac OS에서 쓸 수 있는 kafka docker-compose 구성 (arm 64) (2) | 2024.11.21 |
[카프카] 멱등성(idempotence) 프로듀서란? (2) | 2024.09.17 |
[CCDAK] Confluent Developer for Apache Kafka 2024 대비하기 (1) | 2024.09.17 |
[카프카 퀴즈] 카프카 cli 퀴즈 (0) | 2024.07.02 |
댓글