분류 전체보기

    [Cassanrda] tombstone 수동 제거 방법

    Cassandra Tombstone(이 마킹된 데이터)들을 수동으로 제거해야하는 일이 있었음.수동 처리 방법 nodetool garbagecollect GC를 통해서 삭제된 데이터를 수동으로 삭제하는 기능 테스트 해보니, CPU 및 Disk IO 부하가 꽤 있는 것으로 보임.클러스터내에서 해당 명령을 실행한 노드에서만 garbagecollect가 일어남.안전하게 처리하기 위해서, garbagecollect를 실행할 노드를 서비스에서 제외하고, 처리하기로 함.주의 사항Tombstone의 최소 유지시간인 gc_grace_seconds 만큼 Tombstone(데이터)을 최소한 유지해서, 수동으로 톰스톤을 지우더라도 해당 시간만큼 지나지 않은 톰스톤(데이터)들은 제거되지 않는다.

    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 (기본값..