카프카 6

Producer의 send() method 수행 과정 (feat. flush())

개요 및 결론 send()는 즉시 broker에게 메세지를 전송하지 않는다. send()를 통해 메세지를 내부 버퍼에 쌓아두고 flush()를 통해 broker로 전달한다. 물론 send()와 flush() 사이에도 몇 가지 과정을 거친다. 프로듀서가 메세지를 보내는 과정 Serializer 메세지 객체를 바이트 배열(byte array)로 직렬화한다. Partitioner Kafka Producer가 send() 메소드를 호출하면 Record는 Partitioner에게 전달된다. Partitioner는 지정한 토픽에서 어느 파티션으로 전송할 지 정하는 역할을 한다. Kafka Producer 객체를 생성할 때 Partitioner를 지정할 수 있으며, 설정하지 않으면 DefaultPartitioner로..

카프카 내부 메커니즘 - 4. 요청 처리

브로커가 하는 일의 대부분은 클라이언트와 파티션 리플리카 및 컨트롤러부터 파티션 리더에게 전송되는 요청을 처리하는 것이다. 이러한 요청과 응답에는 TCP로 전송되는 이진 프로토콜을 가지고 있다. 모든 요청에는 다음 내용을 포함하는 헤더가 존재하며 요청 타입에 따라 서로 다른 구조의 데이터를 전송한다. 요청 타입 ID: 어떤 요청인지를 나타낸다. 예를 들어, 메시지를 쓰는 요청은 produce라고 하며 id는 0, 메시지를 읽는 요청은 fetch라고 하며 id는 1 등등... 요청 버전: 프로토콜 API의 버전을 나타낸다. 요청 버전 덕분에 서로 다른 프로토콜을 사용하는 브로커가 요청을 보내도, 카프카는 버전에 맞추어 요청을 처리할 수 있다. cID (correlation ID): 각 요청의 고유 식별 번..

카프카 내부 메커니즘 - 2.컨트롤러

컨트롤러 컨트롤러 역시 카프카 브로커 중 하나이며 일반 브로커의 기능에 더하여 파티션 리더를 선출하는 책임을 갖는다. 컨트롤러 선출 과정 카프카 클러스터가 실행되면 모든 브로커들은 최상위 노드에 /controller 임시 노드를 생성하려고 한다. 이 때 가장 먼저 실행된 브로커가 임시 노드를 생성하고 컨트롤러가 되며 나머지 브로커들은 ‘노드가 이미 존재한다’는 예외를 받고 이미 /controller 임시 노드가 있다는 것과 클러스터에 컨트롤러가 있다는 것을 알게 된다. 이후에 모든 브로커들은 /controller 노드에 주키퍼의 watch를 생성하여 controller 노드에 변화가 생기면 바로 알 수 있도록 한다. 컨트롤러 재선출 컨트롤러 브로커가 중단되거나 연결이 끊기면 임시 노드였던 /control..

카프카 내부 메커니즘 - 1.클러스터 멤버십

실제 업무에서 카프카를 사용하는 작성하는 어플리케이션을 위해서 내부 구조를 알 필요는 없지만 어떻게 동작하는지 알아두면 문제가 발생했을 때 신속히 원인을 파악하고 대처하는(트러블슈팅) 기반이 될 수 있다. 이 글에서는 책 을 바탕으로 카프카 복제(Replication)가 동작하는 방식, 카프카가 프로듀서와 컨슈머의 요청을 처리하는 방법, 카프카가 스토리지(파일 형식, 인덱스 등)를 처리하는 방법을 알아본다. 클러스터 멤버십 주키퍼의 트리구조 데이터 저장 카프카에서 사용하는 주키퍼의 중요사항을 알아볼 필요가 있다. 주피커는 내부적으로 디렉터리처럼 계층적인 트리구조로 데이터를 저장한다. 데이터를 저장하는 노드를 znode라고 하며 각 znode의 이름 앞에는 /(슬래시)를 붙여 디렉터리처럼 경로(path)를..

Kafka의 구조와 원리

Kafka 비동기 처리를 위한 메시지 큐의 한 종류 메일서비스 와의 비교 메일이 대표적인 비동기 메시징 시스템이다. 메일과 비교하면 kafka를 이해하기 용이하다. 메일의 경우 보내는 사람은 받는 사람의 상태와 상관업이 메일 서버로 메시지를 보낼 수 있다. 보낸 메시지는 메일 서버에 저장되며 받는 사람은 원하는 시간에 메일을 볼 수 있다. 카프카도 유사하다. 프로듀서는 카프카로 메시지를 보내고 해당 메시지는 카프카 서버(브로커)에 저장되어 보관한다. 그리고 컨슈머는 필요할 때 카프카 서버에 저장되어 있는 메시지를 가져갈 수 있다. 여러 대의 분산 서버에서 대량의 데이터를 처리하는 분산 메시징 시스템. 원천 시스템으로부터 대규모 트랜잭션 데이터가 발생했을 때 중간에 데이터를 버퍼링하면서 타깃 시스템에 안정..

Kafka tutorial - 1 [설치, topic생성, 발행, consumer group 실행]

install Kafka wget을 이용해 kafka를 download 받은 후, tar를 해제한다. kafka 버전별 wget link는 아래의 링크에서 찾을 수 있다. (다운로드 받으려는 kafka 버전의 하이퍼링크 링크를 복사하고 wget으로 받으면 된다.) https://kafka.apache.org/downloads ~ $ wget https://archive.apache.org/dist/kafka/2.3.0/kafka_2.12-2.3.0.tgz --2021-07-03 16:03:13-- https://archive.apache.org/dist/kafka/2.3.0/kafka_2.12-2.3.0.tgz Resolving archive.apache.org (archive.apache.org).....