Kafka Streams DSL은 레코드의 흐름을 추상화한 개념으로 KStream, KTable, GlobalKTable이 존재합니다.이 개념들은 컨슈머, 프로듀서, 프로세서 API에서 사용되지 않고, 스트림즈 DSL 에서만 사용되는 개념입니다. KStream레코드의 흐름을 표현한 것으로 메시지 키와 메시지 값으로 구성되어 있습니다.카프카 컨슈머로 토픽을 구독하는 것처럼 KStream에 존재하는 모든 레코드가 출력됩니다. KTableKStream은 모든 레코드를 조회할 수 있지만 KTable은 유니크한 메시지 키를 기준으로 가장 최신 레코드를 사용합니다.Java Collection의 Map 자료구조처럼 토픽에 있는 데이터를 key-value store 처럼 사용하는 것 이라고 생각하면 된다.사용자 마지막..
데이터 스트림(이벤트 스트림, 스트리밍 데이터)데이터 스트림이란 ‘무한’히 늘어나는 데이터세트(unbounded dataset)를 추상화한 것이다.시간이 흐름에 따라 새로운 레코드가 계속해서 추가되기 때문에 데이터 세트가 무한해지는것을 의미한다.이벤트 스트림이라는 단순한 모델을 통해서 우리가 분석하고자 하는 모든 비즈니스 활동을 나타낼 수 있다. ‘무한’ 이라는 특성 외 이벤트 스트림 모델의 추가적인 속성들✅ 이벤트 스트림에는 순서가 있다.이벤트는 그 자체로 다른 이벤트 전에 혹은 후에 발생했다는 의미를 가진다.금융 이벤트에서 입금/출금 이벤트 순서에 따라서 처리가 달라져야 한다.계좌에 입금한 뒤 나중에 출금하는 것과 출금을 먼저하고 부채 상환을 위해 나중에 입금하는 것은 완전히 다르다.후자의 경우 초과..
아래 블로그에 대한 내용을 정리한 글입니다.https://dol9.tistory.com/281https://dol9.tistory.com/282https://www.youtube.com/watch?v=tU2pHxLh4ZU 카프카에서 Purgatory가 사용될 때컨슈머컨슈머에서 메시지를 가져올 때 성능 개선을 위해서 메시지를 배치로 묶일 때 까지 대기를 하게 된다.컨슈머가 브로커로부터 레코드를 읽어올 때 데이터의 최소량(byte 단위)이 되지 않았을 때카프카가 컨슈머에게 응답하기 전 충분한 데이터가 모일 때까지 기다릴 수 있는데 시간을 만족하지 않았을 때이 때 컨슈머가 보낸 요청이 머무는 것을 Purgatory라고 하며, Purgatory에서 벗어나는 방법은 요청 조건에 만족하거나, 지정한 시간이 흘러 t..
카프카의 ‘정확히 한 번’ 의미 구조는 멱등적 프로듀서(idempotent producer)와 트랜잭션 의미 구조의 조합으로 이루어진다.멱등적 프로듀서: 프로듀서 재시도로 인해 발생하는 중복을 방지트랜잭션 의미 구조: 스트림 처리 애플리케이션에서 ‘정확히 한 번’ 처리를 보장 멱등적 프로듀서DB에서 아래 구문은 몇 번을 호출하든 간에 x는 18이기 때문에 멱등적이라고 할 수 있다.UPDATE t SET x=18 where y=5 가장 고전적인 카프카에서 재시도로 인한 메시지 중복 예시파티션 리더가 프로듀서로부터 레코드를 받아서 팔로워들에게 성공적으로 복제했지만 프로듀서에게 응답을 보내기 전, 파티션 리더가 있는 브로커에 크래시가 발생한 경우프로듀서 입장에서는 응답을 받지 못한 채 타임아웃이 발생하고, 메..
카프카는 어떻게 신뢰성을 보장할까? 1️⃣ 카프카는 파티션 안의 메시지들 간에 순서를 보장한다.메시지 A 다음에 B가 쓰여졌다면 동일한 프로듀서가 동일한 파티션에 썻을 경우 B의 오프셋이 A보다 큰 것을 보장한다. 2️⃣ 클라이언트가 쓴 메시지는 모든 in-sync replica의 파티션에 쓰여진 뒤에야 commit된 것으로 간주한다.굳이 디스크에 flush될 필요까지는 없으며 프로듀서의 commit 정책을 지정할 수 있다. (acks)완전히 commit된 다음 응답리더에게 쓰여진 다음 응답네트워크로 전송된 다음 바로 응답 3️⃣ commit된 메시지들은 최소 1개의 작동 가능한 replica가 남아 있는 한 유실되지 않는다. 4️⃣ 컨슈머는 commit된 메시지만 읽을 수 있다.메시지를 저장하는 데 있..