본문 바로가기

728x90
반응형

OpenSource/Kafka

(8)
[Kafka] Kafka Consumer 컨슈머는 보통 카프카 컨슈머 API와 그것으로 구성된 애플리케이션을 말합니다. 일반적으로 컨슈머가 토픽을 구독(Subscribe) 혹은 읽는다(Read)고 하는데, 이는 컨슈머가 토픽 파티션에 저장된 메시지들을 가져오는 것을 말합니다. 컨슈머의 3가지 특징은 다음과 같습니다. Polling 구조 단일 토픽의 멀티 커슈밍 컨슈머 그룹 Polling 구조 일반적으로 다른 메시징 큐는 메시지 큐에서 메시지를 push하는데, 카프카는 컨슈머가 브로커로부터 메시지를 pull 해옵니다.push 방식의 가장 큰 단점은 메시지 큐가 컨슈머 측의 성능도 염두해야 합니다. 즉, 메시지 큐가 컨슈머로 메시지를 push 할 때, '이 정도는 할 수 있겠지'라고 컨슈머의 환경을 고려해야 합니다. 하지만 컨슈머가 브로커로부터 메..
[Kafka] Kafka Producer 프로듀서는 보통 카프카 프로듀서 API와 그것으로 구성된 애플리케이션을 말합니다. 프로듀서는 브로커에 특정 토픽(혹은 파티션 영역까지)을 지정하여 메시지를 전달하는 역할을 담당합니다. 프로듀서를 통해 전달되는 메시지의 구조는 다음과 같습니다. 프로듀서 구조와 메시지 전달 과정 프로듀서는 아래의 4가지 과정을 통해 브로커에게 메시지를 전달합니다. 직렬화 (Serializer) 파티셔닝 (Partitioner) 메시지 배치 (Record Accumulator) 압축 (Compression) 전달 (Sender) 각 과정을 천천히 살펴보겠습니다. 프로듀서는 먼저, 전달 요청 받은 메시지를 직렬화합니다. 직렬화는 Serializer가 지정된 설정을 통해 처리하며, 메시지의 키와 같은 바이트 뭉치 형태로 변환됩니..
[Kafka] Message, Topic, Partition Kafka Message 카프카 메시지는 Key와 Value로 구성됩니다. key는 해당 메시지가 카프카 브로커 내부에 저장될 때 저장되는 위치에 관련된 요소입니다. 프로듀서가 메시지를 브로커로 전달할 때, 프로듀서 내부의 파티셔너(Partitioner)가 저장 위치를 결정하는데, 이때 key의 값을 이용하여 연산하고 그 결과에 따라 저장되는 위치를 결정합니다. value는 메시지가 전달하고자 하는 내용입니다. 단순히 문자열이 될 수도 있고, JSON이나 특정 객체가 될 수도 있습니다. +) 다양한 타입의 값을 보낼 수 있는 것은 브로커를 통해 메시지가 발행되거나 소비될 때, 메시지 전체가 직렬화/역직렬화 되기 때문입니다. Topic Topic은 메시지를 구분하는 논리적인 단위로, 동일한 메시지들은 논리..
[Kafka] Consumer Group Consumer Group Consumer Group이란 말 그대로 Consumer 들의 묶음입니다. Consumer Group은 하나의 Topic에 대한 책임을 갖고 있습니다. Kafka Producer가 전송한 메시지는 Topic의 Partition에 나눠서 저장됩니다. Partition에 저장된 이 메시지들은 Consumer들에 의해 읽혀집니다. 하나 이상의 Consumer들은 Consumer Group을 형성합니다. Consumer가 특정 파티션의 데이터 소비를 위한 개념이라면 Consumer Group은 Topic 전체 데이터 소비 관리를 위해 사용됩니다. ('Consumer가 Partition을 소비한다', 'Consumer Group이 Topic을 소비한다' 라고 생각하면 됩니다) 왜 하나의..
[Kafka] Spring Boot에 Kafka 연동하기 #2 저번 시간에는 하나의 Topic에 대한 message 생산/소비 예제를 만들어보았습니다. 이번에는 여러 Topic을 Bean으로 등록 후 message 생산/소비 예제를 살펴보도록 하겠습니다. 우선 이번에도 마찬가지로 Springboot Initializer 또는 IDE를 사용하여 Spring Boot Project를 만들어줍니다. 저는 gradle 빌드 도구를 사용하겠습니다. 기본적으로 kafka 서버가 동작하고 있다는 가정 하에 진행하도록 하겠습니다. kafka 서버 설치 및 동작 방법이 궁금하시다면 이 글을 참고 하시길 바랍니다. 1. 프로젝트 설정하기 build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-s..
[Kafka] Spring Boot에 Kafka 연동하기 #1 오늘은 Spring Boot 프로젝트에 Kafka를 연동하여 사용하는 방법에 대해 간단한 예제를 통해 살펴보겠습니다. Kafka가 설치되어 있지 않다면 이 글을 참고해주시길 바랍니다. 1. 기본 환경 세팅하기 우선 Spring Boot 프로젝트를 하나 만들어줍니다. Spring Boot 프로젝트가 준비 되었다면 build.gradle을 아래와 같이 수정하여 spring-kafka에 대한 의존성을 추가해줍니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'org..
[Kafka] Kafka 환경 구축 및 간단한 예제 (with Docker) 오늘은 Docker를 이용하여 Kafka 서버를 구축하는 방법에 대해 알아보겠습니다. 이 글은 CentOS 7 환경에서의 실행 과정에 대한 설명이니 참고 바랍니다. 1. docker 이미지 선택 docker search kafka docker search 명령어를 통해 docker 이미지 파일을 검색합니다. 가장 star이 많은 이미지를 선택하겠습니다. 2. docker-compose.yml 파일 작성 어떤 docker image 사용할 지 정했으니 이제 docker-compose로 kafka 환경을 구축하겠습니다. kafka는 항상 zookeeper와 함께 동작해야 하기 때문에 여러 docker container를 실행하기 편리한 docker-compose를 사용합시다. 우선 docker-compose..
[Kafka] Kafka의 구성 요소 Kafka (카프카) 대표적인 메시지 큐 시스템으로 Kafka, RabbitMQ, Active MQ가 있는데 그 중 Kafka에 대해 알아보겠습니다. Kafka는 Pub-Sub 모델의 메시지 큐이고, 분산 환경에 특화되어 설계되어 있다는 특징을 가집니다. 각각의 메시지 큐에 장단점이 있겠지만, Kafka는 대용량 처리에 특화되어 설계되어 있기 때문에 여러 요청이 들어오는 대규모 서비스에 적용 시 다른 메시지 큐에 비해 좋은 성능을 보여줍니다. 그 외에도 클러스터 구성, fail-over, replication과 같은 여러 가지 특징들을 가지고 있습니다. 오늘은 Kafka의 구성 요소에 대해 알아보고 다음에 이어 kafka 구성을 해보도록 하겠습니다. 물리적 구성요소 Broker 메시지 수신 및 전달을 처..

728x90
반응형