전체 글

전체 글

    Kafka: Static Membership

    Kafka: Static Membership

    서론Kafka Consumer는 여러 가지 이벤트를 통해 리밸런싱이 발생한다.Consumer ↔ GroupCoordinator 간 session.timeout.ms 내에 Heartbeat가 수신되지 않은 경우Consumer가 Consumer Group을 나가거나 들어오는 경우Consumer Group이 구독하는 토픽의 파티션이 추가되는 경우 등Consumer는 리밸런싱이 시작되면 완료되기 전까지 데이터를 처리하지 못한다. 이로 인해 데이터 처리가 일시 중단되며 지연이 발생한다.또한, 리밸런싱 과정에서 파티션을 Revoke/Assign 하는 과정에서 네트워크 부하 등으로 인한 클러스터 성능 저하가 발생한다. Kafka 2.3.0부터는 이러한 리밸런싱의 단점을 보완하기 위해 Static Membership이..

    Docker: Container Exit Code

    Docker: Container Exit Code

    개요Docker Container의 Exit Code를 정리하고 각 코드의 의미에 대해서 정리한다.Docker Container Exit CodeDocker Container Exit Code란 컨테이너가 종료될 때 “컨테이너가 종료된 원인”을 전달하는데 사용된다.Exit Code를 통해서 컨테이너 종료의 근본적인 원인을 파악할 수 있다.Exit Code는 0 ~ 255까지의 범위를 가지며, 125 미만의 코드는 애플리케이션 사이드에서 종료 코드를 설정하고, 125 이상의 코드는 컨테이너나 시스템 레벨에서 발생한 문제이며 코드는 예약되어 있다.ListExit CodeNameDescriptionExit Code 0Purposely stopped컨테이너가 자동으로 종료됨 (정상 종료)Exit Code 1Ap..

    Strimzi, Kafka Connect를 이용한 데이터 통합 파이프라인 환경 구성하기

    Strimzi, Kafka Connect를 이용한 데이터 통합 파이프라인 환경 구성하기

    서론현재 회사에서 진행중인 메인 프로젝트는 실시간으로 게임으로부터 들어오는 데이터를 통합하고 이를 가공해 제 3자 서비스에게 가공된 데이터를 제공해주는 파이프라인을 구축하는 것입니다. 팀에서는 대용량 데이터를 실시간으로 스트리밍 처리하기 위해 Kafka를 사용 중입니다.따라서, 실시간으로 외부 저장소에 적재되는 게임 데이터를 Kafka로 통합하고, 가공된 데이터를 외부 저장소로 적재하는 기술 도입이 필요했습니다. Kafka Connect는 Kafka의 구성 요소로서 분산 데이터 처리 플랫폼에서 스트리밍 데이터 통합 프레임워크입니다.다양한 외부 저장소(Source/SInk)로부터 Kafka Connector를 통해 데이터를 가져오고, 적재할 수 있는 장점이 있습니다. 일반적으로 Kafka Connect는 ..

    Kafka Connect: Custom TimestmapExtractor

    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장. 사용자 수에 따른 규모 확장성

    1장. 사용자 수에 따른 규모 확장성

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

    3장. 다형성과 추상 타입

    3장. 다형성과 추상 타입

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

    2장. 객체 지향

    2장. 객체 지향

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

    Kafka Issue: InvalidRecordException (related Timestamp)

    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..