Pseudo Column Pseudo Column은 Table / Stream을 생성할 때 선언하지 않았지만 SELECT문으로 불러올 수 있는 Column을 의미한다. Pseudo Column은 레코드의 생성 시점의 메타정보를 담고 있다. *를 이용해서 불러올 때는 불러지지 않지만, 명시적으로 이름을 표시해 줄 경우 SELECT 문에서 확인할 수 있다. Pseudo Column 의미 HEADERS 카프카 레코드의 헤더에 있던 값이 채워진 열이다. ROWOFFSET Source Record의 Offset을 의미한다. (Source Node에서 받아왔을 때의 Offset 의미?) ROWPARTITION Source Record의 Partition을 의미한다. (Source Node에서 받아왔을 때의 Pari..
들어가기 전 이 글은 Kafka Streams의 코드를 따라가며 작성한 글입니다. 틀린 내용을 발견하시면 댓글로 알려주시면 감사하겠습니다. 간단 정리 카프카 스트림즈 클러스터에 새로운 카프카 스트림즈 인스턴스가 들어오는 경우, 카프카 스트림즈 클러스터는 전체적으로 리밸런싱을 한다. 그런데 카프카 스트림즈는 일반적인 Kafka Consumer의 리밸런싱과는 조금은 다른 방식으로 동작한다. 왜냐하면 카프카 스트림즈에는 StreamTask라는 개념이 존재하기 때문이다. StreamTask는 각 토픽의 파티션 별로 나누어진 녀석들이고, 각 카프카 스트림즈가 어떤 StreamTask를 가지고 있느냐에 의존적으로 카프카 Consumer가 결정되어야 한다. 따라서 일반적인 카프카 Consumer와는 다른 방식으로 리..
들어가기 전 이 글은 개인적으로 Kafka Streams의 코드를 따라가면서 작성한 글입니다. 틀린 부분이 있을 수 있기 때문에 틀린 부분을 알려주시면 다시 한번 공부해서 수정해두겠습니다. pollPhase()의 전체적인 요약 카프카 스트림즈는 StreamThread가 모든 작업을 처리해주고 있다. StreamThread는 기본적으로 5개의 단계로 ETL을 한다. 아래 단계에서 확인할 수 있다. 파란색으로 표시해둔 부분은 반복해서 처리하는 부분이다. 이 글에서는 5개의 단계 중 pollPhase()에 대해서 알아보고자 한다. pollPhase() → initializedAndRestorePhase() → [ process() → taskManager.process() → taskManager.punctu..
들어가기 전 이 글은 실전 카프카 개발부터 운영까지 4장을 공부하며 정리한 글입니다. 4.1 카프카 리플리케이션 카프카는 초기 설계 단계부터 브로커 몇 대가 죽더라도 안정적으로 서비스 할 수 있도록 설계되었다. 카프카가 안정적으로 서비스 할 수 있는 이유는 바로 Replication 동작을 하기 때문이다. Replication은 복제를 의미한다. 즉, 하나의 브로커가 죽더라도 다른 브로커가 대신할 수 있도록 '복제' 해둔다. 4.1.1 리플리케이션 동작 개요 선요약을 하면 다음과 같다. 카프카는 토픽을 생성할 때 replication-factor를 이용해서 복제본을 몇개 생성할 지를 결정한다. 이 복제본은 원본이 파손되었을 때, 즉시 원본으로 대체해서 사용하는 녀석이다. replication-factor..
들어가기 전 이 글은 실전 카프카 개발부터 운영까지 5장을 공부하며 작성한 글입니다. Producer - Broker 통신 Producer는 Broker에게 메세지를 보낸다. Broker는 메세지를 받고, 그것을 잘 기록한 경우에 Producer에게 ACK를 내려준다. Producer는 ACK 신호를 받을 수 있고, 받은 ACK 신호를 참조해서 이후에 다음 일을 할 수 있다. 예를 들어 ACK 신호와 상관없이 다음 메세지 배치를 보낼 수도 있고, ACK가 잘못된 경우 다시 재전송을 해볼 수도 있다. 프로듀서의 전송 방법 프로듀서의 전송 Semantic은 다음 4가지가 존재한다. 그리고 아래에서 하나하나 어떻게 동작하는지를 살펴보고자 한다. at least once : 적어도 한번 전송. 중복 메세지 발생..