연말 발송량이 많아지면서 발송처리 후 처리 작업을 위한 토픽의 컨슈머 랙이 40,000건 기준으로 6시간 이상 처리가 안되는 이슈가 생겨 처리가 필요해 보였음. 이 정도도 처리 못하는건 문제가 있다고 판단.해결 할 수 있는 방법이 몇 가지 있을듯?컨슈머 처리 속도를 높인다.1. 컨슈머 20개 토픽 20개 맞춰서 처리를 높인다. (확인해보니 토픽이 20개인데, 컨슈머는 3개인 상태로 동작하고 있음.)- 아예 토픽을 좀 더 늘리는 방법도 고려해볼 수 있을 것 같다. 하지만 컨슈머 3개인 상태로 동작하는게 큰 문제로 보여, 이 부분 부터 해결하고 고려하기로하자.2. 컨슈머의 비지니스 로직을 개선한다. (비지니스로직이 단건 씩 처리하도록 하는 부분이 많아 DB I/O가 부하가 많이 걸리도록 처리되고 있었음 ..
더보기사용이유 : 동기 삽입으로 인한 I/O 절약 하기 위함Clickhouse 에서 Async Insert 설정을 사용하게되면, Clickhouse가 서버측에서 일괄로 처리 할 수 있습니다.Clickhouse의 기본 설정은 동기식으로 작동하게 됩니다. 아래 그림은 async_insert = 0 이 상태, 기본 설정입니다. 기본 설정을 이용하게 되면, Insert statements가 작동함에 따라 동기적으로 처리가 됩니다.아래 설정은 async_insert설정을 사용하는 방식입니다.async_insert =1 으로 설정하게 되면 async_insert를 활성화 한다는 뜻입니다. ClickHouse는 정기적으로 디스크에 플러시하기 전에 먼저 들어오는 삽입을 메모리 내 버퍼에 저장합니다.wait_for_as..
Keys 보단, SCAN을 사용하자 # 모든 key를 조회하는 명령인 keys는 사용하지 말고, scan 명령으로 대체하여 사용해야합니다. KEYS 명령어의 위험성 가장 먼저 구현한 기능은 특정 검색 키워드의 캐시를 삭제하는 기능이었는데, key를 삭제하기 위해서는 먼저 조회를 해야 합니다. 이때 일반적으로 생각할 만한 명령어가 바로 KEYS 입니다. glob pattern으로 간단히 데이터베이스의 모든 key를 조회할 수 있고, 시간 복잡도가 O(N)이기는 하지만 공식 문서에 따르면 저사양 랩탑에서도 40ms 내에 100만 개의 key가 존재하는 데이터베이스를 스캔할 수 있다고 합니다. 그러나 이 명령에는 치명적인 문제점이 있는데, 해당 명령이 실행되는 도중에는 다른 모든 명령의 실행이 블로킹된다는 점..
목차파티셔너카프카에서 메시지 전송 구현방식 파티셔너프로듀서가 전송하려는 메시지들은 프로듀서의 send() 메소드를 통해 시리얼라이저, 파티셔너를 거쳐 카프카로 전송된다.이 과정을 파티셔닝이라고 한다.카프카의 토픽은 성능 향상을 위해 병렬 처리가 가능하도록 파티션으로 나누고, 각 파티션에 프로듀서가 전송한 메시지가 로그 세그먼트에 저장된다.프로듀서는 토픽으로 메시지를 보낼 때 해당 토픽의 어느 파티션으로 메시지를 보내야 할지를 결정 하는데, 이때 사용하는 것이 "파티셔너(partitioner)"입니다.기본적으로 메시지(레코드)의 키를 Hash처리 해 파티션을 구하는 방식을 사용하는데, 메시지의 키 값이 동일하면 해당 메시지들은 모두 같은 파티션으로 전송되는 방식으로 구현된다.배치전송 옵션buffer.mem..
Q. 어떻게 Kafka 가 높은 처리량, 빠른 응답 속도, 안정성을 갖는지? 1) 분산시스템카프카는 분산시스템이다.최초로 구성하는 클러스터에 브로커를 추가하는 방식이여서 확장이 가능하고 카프카 브로커 추가는 온라인 상태에서 매우 쉽다. 이런 확장이 용이한 구조가 카프카의 장점, 그리고 분산 시스템이므로 성능이 좋고, 장애 대응이 좋다는 점.초기에 카프카 클러스터가 3대 브로커 운영중이더라도, 서비스가 증가하여 브로커를 증가하는게 용이다하. 수십개, 그 이상으로도 브로커로도 확장할 수도 있다. 2) 페이지 캐시 "페이지 캐시"의 이용으로 높은 처리량을 얻을 수 있었다!운영체제에서 페이지 캐시를 통해 성능을 높이는데 카프카도 Os의 페이지 캐시를 활용하는 방식으로 설계된다. 디스크 IO를 줄여..
클러스터 : 물리적인 노드 인스턴스들의 모임이다. 클러스터는 모든 노드의 검색과 색인 작업을 관장하는 논리적인 개념이다. RDB에서는 모든 요청을 서버 하나에서 처리하지만, ES의 경우 다수의 서버로 분산해서 처리하는 것이 가능해서 대용량 데이터를 처리할 수 있다. 이렇게 대용량을 분산 처리 하기 위해 다양한 형태의 노드들을 조합해서 클러스터를 구성해야 하는데, 기본적으로 "마스터 노드" 가 전체적인 클러스터를 관리하고, "데이터 노드"가 실제 데이터를 관리한다. ES는 설정 에 따라 4가지 유형의 노드를 제공한다. 마스터 노드(Master Node) - 클러스터를 상태 관리 - 노드 추가와 제거 같은 클러스터의 전반적인 관리를 한다. - 메타 데이터 관리 Index 생성, 삭제 등 클러스터 관련된 전반..
ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];] 인덱스 setting 확인 > GET my_index/_settings { "my_index": { "settings": { "index": { "refresh_interval": "5s", "number_of_shards": "1", "blocks": { "read_only_allow_delete": "true" }, "provided_name": "my_index", "creation_date": "1586831203626", "number_of_replicas": "0", "uuid": "", "version": { "created": "603..
term : 정확하게 맞는 검색어 질의 match : 검색어 분석후 질의 match_phrase : 검색어 분석후 질의 0.terms(복수개의 term 검색) { "query": { "bool": { "filter": [ { "bool": { "must": [ { "terms": { "tagInfo.tags": [ "냉장고" ] } } ] } } ] } } } 0-1.terms고 검색한 내용중 userId로 집계(aggregation) { "from": 0, "size": 0, "query": { "bool": { "filter": [ { "bool": { "must": [ { "terms": { "tagInfo.tags": [ "냉장고" ] } } ] } } ] } }, "aggs": { "group_..