분류 전체보기

    카프카 프로듀서

    파티셔너 카프카의 토픽은 성능 향상을 위한 병렬 처리가 가능하도록 하기 위해 파티션으로 나뉩니다. (최소 하나 또는 둘 이상의 파티션) 그리고 프로듀서가 파티션으로 전송한 메시지는 해당 토픽 내 각 파티션의 로그 세그먼트에 저장된다. 따라서 프로듀서는 토픽으로 메시지를 보낼 때 해당 토픽의 어느 파티션으로 메시지를 보내야 할지를 결정해야 하는데 이때 사용하는 것이 파티셔너. 프로듀서가 파티션을 결정하는 알고리즘은 기본적으로 메시지(레코드)의 키를 해시처리해 파티션을 구하는 방식을 사용해서 메시지의 키 값이 동일하면 해당 메시지들은 모두 같은 파티션으로 전송된다. 주의할 점은 프로듀서가 동일한 메시지의 키를 이용해 메시지를 전송하더라도 파티션의 수를 늘린 후에는 다른 파티션으로 전송될 수 있다. 따라서 메..

    Kafka Log Segment

    로그 세그먼트 카프카의 토픽으로 들어오는 레코드는 세그먼트라는 파일에 저장된다. 메시지는 정해진 형식에 맞추어 순차적으로 로그 세그먼트 파일에 저장된다. 로그 세그먼트에는 메시지의 내용만 저장되는 것이 아니라 메시지의 키, 밸류, 오프셋, 메시지 크기와 같은 정보가 함께 저장됨, 로그 세그먼트 파일들은 브로커의 로컬 디스크에 보관된다. 하나의 로그 세그먼트 크기가 너무 커져버리면 파일을 관리하기 어렵기 때문에, 로그 세그먼트의 최대 크기는 1GB가 기본값으로 설정되어 있음. 로그 세그먼트가 1GB보다 커지는 경우 기본적으로 롤링 전략을 사용 하나의 로그 세그먼트에 카프카로 인입되는 메시지들을 계속 덧붙이다가 로그 세그먼트의 크기가 1GB에 도달하면 해당 세그먼트 파일을 클로즈하고, 새로운 로그 세그먼트를..

    카프카 리플레이션 동작 방식

    카프카 리플리케이션 일시적인 하드웨어 이슈 등으로 브로커 한두 대에서 장애가 발생하더라도 안정성을 확보하기 위해 카프카 내부에서는 리플리케이션이라는 동작을 하게 된다. 리더와 팔로워 카프카는 내부적으로 모두 동일한 리플리케이션들을 리더와 팔로워로 구분하고, 리플리케이션 중 하나가 리더로 선정되며, 모든 읽기와 쓰기는 그 리더를 통해서만 가능. 프로듀서에서는 모든 리플리케이션에 메시지를 보내는 것이 아니라, 리더에게만 메시지를 전송한다. 또한 컨슈머도 오직 리더로부터 메시지를 가져온다 팔로워는 컨슈머와 비슷하게 지속적으로 파티션의 리더가 새로운 메시지를 받았는지 확인하고, 새로운 메시지가 있다면 해당 메시지를 리더로부터 복제한다. 복제 유지와 커밋 리더와 팔로워는 ISR(InsyncReplica)라는 논리..

    Cassandra JMX 지표

    https://cassandra.apache.org/doc/latest/cassandra/operating/metrics.html Cache Hit Rate NameTypeDescription RowCacheHit Counter Number of table row cache hits. KeyCacheHitRate Gauge Key cache hit rate for this table. Memtable & SSTable Size NameTypeDescription MemtableOnHeapSize Gauge Total amount of data stored in the memtable that resides on-heap, including column related overhead and partitio..

    자바 병렬성과 동시성 정리

    병렬성: 한 테스크를 여러 하위 테스크로 나눠서 CPU의 다른 코어 또는 다른 머신에서 이들 하위 테스크를 병렬로 실행한다. 동시성: 조금씩 연관된 작업을 같은 CPU에서 동작하는 것 또는 애플리케이션의 생산성을 극대화할 수 있도록 코어를 바쁘게 유지하는 것이 목표라면, 원격 서비스나 데이터베이스 결과를 기다리는 스레드를 블록함으로써 연산 자원을 낭비하는 일을 피해야 한다. 자바는 이런 환경에서 사용할 수 있는 두 가지 주요 도구를 제공한다. Future 인터페이스로 자바 8의 CompletableFuture 구현은 간단하고 효율적인 문제 해결사. 자바9에 추가된 발행 구독 프로토콜에 기반한 리액티브 프로그래밍 개념을 따르는 Flow API는 조금 더 정교한 프로그래밍 접근 방법을 제공한다. 동시성은 단..