전체 글

전체 글

    Cassandra DB에서 COUNT 쿼리가 위험한 이유..

    내부적으로 N개씩 (Paging 설정으로 변경 가능하며, default 100) 커서 조회로 파티션을 풀 스캔함..) 파티션 키로 필터링 조건으로 조회한다면, 파티션 기준으로 풀 스캔하고, 파티션 필터링 조건조차 없다면, 모든 파티션을 풀 스캔한다… 동작방식에서 알 수 있다시피, 파티션 크기가 점점 커질수록, 카산드라에 많은 부하를 유발하니 사용하지 말자.. 만약 테이블 기준 전체 카운트를 알아야 한다면, nodetool tablestat (Number of keys, estimate)에 나오는 로우 추정 갯수를 통해 확인할 수 있다. https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/tools/toolsTablestats.html nodetool ta..

    k8s HPA 동작 방식 및 이슈들 정리

    HPA (Horizontal Pod AutoScaling) 도입 배경운영하는 플랫폼이 버스트성으로 들어오는 트래픽들이 많고, 점점 많아질 예정이어서 이러한 버스트성 트래픽을 k8s 환경에서 효율적으로 대응하기 위해서 HPA을 검토하였음. HPA (Horizontal Pod AutoScaling) 이란?Workload Resource를 자동으로 업데이트 하며, 워크로드의 크기를 수요에 맞게 자동으로 스케일링하는 것을 목표로 함.즉 k8s에서 AutoScaling의 역할을 수행. HPA 동작 방식 k8s는 HPA을 간헐적으로 실행되는 컨트롤 루프 형태로 구현했다. 이 말은 지속적으로 모니터링해서 워크로드를 변경하지 않고, 주기(default 15초)별로 체크하는 형태. 각 주기마다, Controller Ma..

    Thread/Heap dump 뜨는 법

    jps -v java PID 확인 후 Thread Dump jstack {{PID}} > {{경로}}/thread-dump.txt heap dump jmap -dump:live,format=b,file={{경로}}/{{파일명}}.hprof {{PID}}

    카프카 컨슈머와 그룹 코디네이터

    컨슈머 오프셋 관리 컨슈머의 동작 중 가장 핵심은 오프셋 관리. 오프셋이란 메시지의 위치를 나타내는 위치 컨슈머는 카프카에 저장된 메시지를 꺼내오는 역할을 하기 때문에 컨슈머가 메시지를 어디까지 가져왔는지를 표시하는 것은 매우 중요. 컨슈머 그룹은 자신의 오프셋 정보를 카프카에서 가장 안전한 저장소인 토픽에 저장. __consumer_offsets 토픽에 각 컨슈머 그룹별로 오프셋 위치 정보가 기록됨. 모든 컨슈머 그룹의 정보가 저장되는 __consumer_offsets 토픽은 파티션 수와 리플리케이션 팩터 수를 갖고 있으며, 내부 토픽이지만 파티션 수와 리플리케이션 팩터수는 브로커의 설정 파일인 server.properties에서 변경 가능. offsets.topic.num.partitions (기본값..

    카프카 프로듀서

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