Kafka 5

Message Broker 2023. 8. 27. 22:21

공부한 개념을 한 문장씩 쭉 세워본다. 컨슈머는 카프카에 적재된 데이터를 가져가서 필요한 처리를 한다. 컨슈머는 토픽 기준으로 데이터를 소비한다. 카프카 공식 오픈 라이브러리 (Java) 기준으로.. Fetcher 객체는 리더 파티션으로부터 레코드들을 가져오는 책임을 가진다. (배치로 묶어서 가져온다.) KafkaConsumer 의 poll 메서드는 Fetcher 에 있는 레코드들을 리턴해준다. ConsumerRecords 객체는 poll 메서드의 리턴 타입으로 처리가 필요한 레코드들(ConsumerRecord)이 담겨 있다. ConsumerRecord 객체에는 오프셋이 포함되어있다. 컨슈머 그룹은 컨슈머를 각 컨슈머 그룹으로 부터 격리된 환경에서 안전하게 운영할 수 있도록 도와준다. 컨슈머 그룹으로 묶..

Article Thumbnail
Kafka 4

Message Broker 2023. 8. 27. 22:06

공부한 개념을 한 문장씩 쭉 세워본다. 카프카에서 데이터의 시작점은 프로듀서이다. 프로듀서는 데이터를 전송할 때 리더 파티션을 가지고 있는 카프카 브로커와 직접 통신한다. 카프카 공식 오픈 라이브러리 (Java) 기준으로.. ProducerRecord 를 KafkaProducer 의 send 메서드로 보낼 수 있다. KafkaProducer 의 send 메서드를 호출 하면, 프로듀서 내부적으로 Partitioner, Accumulator, Sender 가 동작하고 실질적으로 데이터가 리더 파티션을 가진 카프카 브로커로 전송된다. ProducerRecord 객체는 프로듀서에서 생성하는 레코드이다. (오프셋은 미포함) KafkaProducer 의 send 메서드는 레코드를 전송하기 위한 요청 메서드이다. P..

Kafka 3

Message Broker 2023. 8. 18. 20:11

공부한 개념을 한 문장씩 쭉 세워본다. 토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위이다. (RDBMS 의 Table) 토픽은 1개 이상의 파티션을 가진다. 파티션에는 프로듀서가 보낸 데이터들이 저장된다. 해당 데이터를 레코드(record) 라 부른다. 파티션은 큐(Queue) 자료구조와 비슷하게 FIFO 로 동작된다. 큐에서는 데이터를 가져가면(pop) 삭제 하지만, 카프카에서는 삭제하지 않는다. 따라서, 동일한 레코드에 대해 여러 컨슈머 그룹이 가져갈 수 있는 환경이다. 위 그림은.. 브로커 3개에 파티션이 5개인 1개의 토픽을 생성한 그림이다. 팔로워 파티션은 없으므로 replication factor 는 1 이다. 위 그림처럼 파티션이 5개인 1개의 토픽을 생성하면.. round-robi..

Article Thumbnail
Kafka 2

Message Broker 2023. 8. 16. 02:21

공부한 개념을 한 문장씩 쭉 세워본다. 카프카 브로커는 카프카를 이용하는 모든 Application 과 데이터를 주고받기 위해 사용하는 주체이다. 우리가 개념적으로 카프카라 생각하는 그것. 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행된다. 카프카는 보통 데이터를 안전하게 보관하고 처리하기 위해 3대 이상의 브로커 서버를 1개의 클러스터로 묶어서 운영한다. 클러스터 형태의 카프카의 브로커들은... Producer 가 보낸 데이터를 안전하게 분산 저장하고 복제하는 역할을 수행한다. 따라서, 급작스런 브로커의 장애에도 안전하게 사용할 수 있다. 카프카 클러스터를 실행하기 위해서는 주키퍼가 필요하다. 카프카 3.0 부터는 주키퍼가 없어도 클러스터 형태로 운용할 수 있게 되었다. 하나의 주키퍼 앙상블로..

Article Thumbnail
Kafka 1

Message Broker 2023. 8. 16. 02:02

공부한 개념을 한 문장씩 쭉 세워본다. 카프카는 각각의 Application 끼리 연결하여 데이터를 처리하는 것이 아니라.. 연결하고 싶은 수많은 두개의 Application 쌍 사이에서 동작하는 하나의 데이터 처리기이다. (중앙 집중화) 연결하고 싶은 두개의 Application 에서.. 메시지를 보내는 쪽은 Producer, 메시지를 받는 쪽은 Consumer 이다. 카프카의 토픽은 RDBMS 의 Table 개념이다. 하나의 토픽에는 여러 파티션이 존재한다. 파티션 내부 구조는 메시지 큐와 동일한 FIFO 구조이다. 하나의 메시지는 파티션 한개에 보내지게 된다. Application 에서는 Kafka 토픽만 신경 써주면 된다. 파티션은 신경 안써도 카프카가 알아서 처리해준다. 많은 양의 데이터를 송수..

@Configuration 와 싱글톤

Spring/Core 2023. 7. 13. 22:04

@Configuration 은 스프링 컨테이너에 스프링 빈을 등록할 수 있도록 해주는 어노테이션이다. @Configuration 이 적용된 클래스 내부에 다수의 @Bean 이 적용된 메서드가 있으면 스프링 빈으로 등록해준다. @Bean 이 적용된 메서드가 하는 역할은 반환되는 객체를 해당 메서드의 이름을 가진 스프링 빈으로 등록한다. @Bean 은 스프링 빈으로 등록되는 클래스에 작성하여도 동작한다. (@Component 적용된 클래스 내부에 작성) 본격적으로 이번 포스팅 주제인.. @Configuration 어노테이션의 이해도를 높여보자. @Configuration public class AppConfig { @Bean public MyBean myBean() { return new MyBean(); ..

Article Thumbnail
Layered architecture faults and improvement

대규모 시스템 설계 2023. 6. 22. 23:13

오늘은 계층형 아키텍처의 문제점에 대해 알아보겠다. 계층형 아키텍처는 코드에 나쁜 습관들이 스며들기 쉽고.. 시간이 지날수록 소프트웨어를 점점 더 변경하기 어렵게 만드는 수많은 허점들이 생긴다. 위는 전통적인 웹 애플리케이션의 구조이다. 의존성의 마지막은 영속성 계층이므로 애플리케이션은 데이터베이스에 의존하게 된다. 따라서, 어떤 요구사항을 구현할 때 데이터베이스의 구조를 먼저 생각하고 이를 토대로 도메인 로직을 구현하기 쉽다. 즉, 데이터베이스 주도 설계로 유도 되는 것이다. 하지만, 비즈니스 관점에서는 도메인 로직을 먼저 만들어야한다. 도메인 로직이 맞다는 것을 확인한 후에 이를 기반으로 영속성 계층과 웹 계층을 만들어야한다. 또한, ORM 프레임워크를 계층형 아키텍처와 결합하면 비즈니스 규칙을 영속..

Article Thumbnail
JPA 등록, 기본 키 생성 전략

Spring/DB, Cache 연동 2023. 6. 19. 13:07

이번엔 JPA 의 등록 과정에 대해 알아보겠다. JPA 의 등록 과정은 크게 2단계를 따른다. 1. 영속성 컨텍스트에 엔티티 등록 -> 엔티티를 영속 상태로 변경 2. 플러시 과정을 거쳐 영속성 컨텍스트에 존재하는 엔티티를 DB 에 반영 -> 쓰기 지연 SQL 저장소의 SQL 을 DB 에 보낸다. 이제 자세하게 알아보겠다.. 먼저 위 사진을 한번 보자.. persist 메서드를 호출하면 해당 엔티티에 대해서.. insert 문이 생성되어 쓰기 지연 SQL 저장소에 저장되고 1차 캐시에 저장되는 두개의 작업이 이루어진다 코드를 통해 이해해보자.. addMember 메서드를 호출하면 어떤일이 발생하는지 알아보겠다. 1. @Transactional 어노테이션이 적용된 메서드이므로 수동 커밋 모드로 진행되며....

Article Thumbnail