전체 글

Kafka Connect: Custom TimestmapExtractor
개요Confluent S3 Sink Connector는 Custom Partitioner, Custom TimestampExtractor 구현을 통해 요구사항에 맞게 S3 버킷 경로 구성이 가능하다.TimeBasedPartitioner 사용 시 Custom TimestampExtractor를 이용해 Record에서 Tiemstamp를 추출해서 버킷 경로를 구성해보자.TimestampExtractor사용 용도Kafka Record 내에서 특정 기준으로 Timestamp를 추출하는 기능을 제공하는 인터페이스Confluent에서 공식적으로 제공하는 TimestampExtractor 구현체는 다음과 같다.RecordFieldTimestampExtractor: Record내 타임스탬프를 사용하는 필드에서 추출Re..

1장. 사용자 수에 따른 규모 확장성
개요단일 사용자에서 다수의 사용자를 커버할 수 있는 시스템 확장에 대해 알아본다.단일 서버단일 서버 사용 시 사용자의 요청 흐름사용자는 도메인 주소를 이용해 웹사이트 접속DNS(Domain Name Service)를 이용해 도메인 주소 → IP 주소 변환DNS가 반환한 IP 주소로 HTTP 요청을 전달웹 서버는 HTML 페이지 혹은 JSON 결과를 응답데이터베이스서버는 웹 계층(트래픽 처리를 위한 웹 서버)과 데이터 계층(데이터베이스)을 구분하는 것이 좋다.계층을 분리함으로써 각각을 독립적으로 확장할 수 있다.데이터베이스의 선택데이터베이스는 크게 관계형 데이터베이스와 비-관계형 데이터베이스 사이에서 선택한다.관계형 데이터베이스(RDB): MySQL, PostgreSQL 등비-관계형 데이터베이스(NoSQL..

3장. 다형성과 추상 타입
상속 개요상속(Inheritance): 한 타입을 그대로 사용하면서 구현을 추가할 수 있도록 하는 방법상속 대상이 되는 클래스 = 상위(super) 클래스, 부모(parent) 클래스상속을 받는 클래스 = 하위(sub)클래스, 자식(child)클래스자식 클래스는 부모 클래스에 정의된 구현을 물려 받는다.private 접근 제어자가 명시된 메소드, 필드를 제외하고 물려받는다.재정의(Overriding): 하위 클래스에서 상위 클래스에 정의된 메소드를 새로 구현하는 것메소드를 오버라이딩하면, 메소드 실행 시 상위 타입 메소드가 아닌 재정의한 하위 타입 메소드가 실행된다다형성과 상속다형성(Polymorphism): 한 객체가 여러 가지 모습(타입)을 갖는 것, 한 객체가 여러 타입을 가질 수 있는 것정적 타입..

2장. 객체 지향
"개발자가 반드시 정복해야할 객체 지향과 디자인 패턴" 서적 기록절차 지향과 객체 지향절차 지향 프로그래밍절차 지향 프로그래밍(Procedural Oriented): 데이터를 조작하는 코드를 별도로 분리해 함수나 프로시저로 만들어 프로그램을 구성하는 방법절차 지향 프로그래밍은 데이터를 중심으로 프로시저가 구성된다. 프로시저에 의해 발생한 데이터를 다른 프로시저와 공유해 사용하기 때문에 다음과 같은 단점이 있다.데이터 타입이나 의미가 변경될 때 의존하는 프로시저가 함께 수정되어야 한다.같은 데이터를 각 프로시저들이 다른 의미로 사용하는 경우가 생긴다.코드의 수정이 어려워지며 새로운 기능을 추가하는데 비용이 많이 든다.객체 지향 프로그래밍객체 지향 프로그래밍(Object Oriented): 데이터와 데이터와..

Kafka Issue: InvalidRecordException (related Timestamp)
에러 발생 환경AWS MSK (3.6.0), Tiered Storage 활성화에러 로그"org.apache.kafka.connect.errors.ConnectException: Unrecoverable exception│ from producer send callback\\n\\tat org.apache.kafka.connect.runtime.WorkerSourceTask.maybeThrowProducerSendException(WorkerSourceTask.java:340)\\n\\tat│ org.apache.kafka.connect.runtime.WorkerSourceTask.prepareToSendRecord(WorkerSourceTask.java:133)\\n\\tat..

1장. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
개요데이터가 중심이 되는 애플리케이션에서 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 데이터 시스템을 구축하기 위해 필요한 내용을 알아보자.신뢰성, 확장성, 유지보수성의 의미를 명확히 알아보자데이터 시스템비교적 최근에 등장한 다양한 데이터 저장/처리를 위한 도구 (e.g Kafka, Redis 등)들은 전통적인 데이터 저장소 분류(e.g 큐, 캐시, 데이터베이스)를 위한 경계가 흐려졌다.애플리케이션에서는 다양한 데이터 저장/처리 도구를 사용한다.다양한 도구들을 애플리케이션 코드를 이용해단일 도구에서 작업을 효율적으로 수행하기 위한 여러 태스크를 생성한다.데이터 시스템를 올바르게 설계하기 위해선 신뢰성, 유지보수성, 확장성을 중점을 둬야 한다.신뢰성(Reliability): 하드웨어, 소프트웨어, 휴먼..

Kafka: Kafka Broker 내부 구조
Confluent Kafka Course 읽고 정리하기카프카는 데이터와 메타데이터를 분리해서 다룬다.카프카 클러스터 내 기능은 Data Plane과 Control Plane으로 나뉜다.Control Plane: 카프카 클러스터의 메타데이터 관리를 처리한다.Data Plane: 카프카에서 읽고 쓰는 전체 데이터를 다룬다.카프카 브로커 내부 구조카프카에서 클라이언트 요청은 Produce, Fetch request 두 분류로 나뉜다.Produce Request: 데이터 배치를 특정 토픽에 쓰도록 요청Fetch Request: 카프카 토픽에서 데이터를 가져오는 요청두 요청 모두 동일한 단계를 거친다.Producer Request파티션 할당프로듀서가 레코드를 전송할 준비가 되면, 파티셔너를 이용해 레코드에 할당할..

자비스 앤 빌런즈 (삼쩜삼) 개발자 공채 챌린지 후기
“삼쩜삼”으로 잘 알려진 자비스 앤 빌런즈 하반기 공개 채용 챌린지를 참가하면서 느낀점을 정리해보려한다. 일반 채용 프로세스는 “서류 - 과제 테스트 - 1차 기술면접 - 2차 컬쳐핏 면접 - 3차 C-Level (임원면접)”로 되어있기는 했는데 프로그래머스에서 진행한 공채 챌린지 전형은 면접이 몇 번인지는 모르겠다. 나는 코딩 테스트 - 과제 테스트 - 1차 면접까지만 진행하고 채용 절차가 마무리 되었다. 코딩 테스트 우선 코딩 테스트. 코딩 테스트의 난이도 자체는 별로 어렵지 않았던 것 같다. “간단한 구현 2문제, BFS 1문제, 덱을 이용한 구현 1문제”로 총 4문제가 출제되었다. 시간은 3시간이었지만 얼추 2시간만에 다 풀고 나왔던 것 같다. 문제를 풀면서 시간이 남아서 리팩토링과 주석을 달아 ..