본문 바로가기
728x90

OpenSource6

[Kafka] Kafka Lag의 진짜 원인 - Consumer에서 집계를 하면 생기는 일 “여러 토픽에서 들어오는 데이터가 전부 도착해야 다음 작업을 실행해야 한다.” 이번에 구현하게된 기능 중 하나로 Redis를 이용한 분산 집계 구조 설계를 해보았다.구현 중 발생한 오류를 해결하는 과정을 작성해보았다.🚨 이 글을 쓰게 된 실제 문제 상황우리는 하나의 작업을 수행하기 위해 서로 다른 4개의 Kafka 토픽에서 데이터를 받아야 했다.토픽데이터 도착 시점은 아래의 표와 같다.A5초 후B10초 후C15초 후D20초 후즉, 마지막 토픽이 항상 제일 늦게 도착하는 구조였다. 처음에는 단순하게 이렇게 구현했다.Kafka 메시지 수신 → Redis에 저장 → 현재까지 저장된 개수 확인 → 다 모이면 실행 그런데 운영 중 이상 현상이 발생했습니다.마지막 토픽(위의 예시에서 D)에서 Kafka Lag 발.. 2026. 2. 1.
[Docker] docker exec [container] bash -c [command] docker exec [컨테이너이름] /bin/bash -c "실행할 스크립트 명령어"  코드를 분석하다가 위의 명령어를 실행하는 코드를 봤다.대충은 어떤 동작을 하는지 알지만 정확하게 몰라서 이번 기회에 정리해본다.1️⃣ docker execExecute a command in a running container실행 중인 컨테이너에서 명령어를 실행한다.-i , --interactive: STDIN(표준입출력) 유지-t, --tty : 의사 터미널 할당-it : 컨테이너 내에서 셀과 같은 대화형 인터페이스를 제공받을 수 있다.docker exec -it [container_id] /bin/bash실행된 도커 컨테이너에 /bin/bash 쉘을 사용하기 위해 이 명령어를 사용했다.2️⃣ 쉘 옵션-c 옵션 :.. 2024. 7. 16.
[Kafka] Zookeeper 기본 개념 정리 https://zookeeper.apache.org/ Apache ZooKeeperzookeeper.apache.org Zookeeper?분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와준다.일반적으로 N개의 주키퍼 서버의 집합인 Ensemble로 구성leader-follower 구조 : Leader가 Follwer에게 동기화를 위한 명령을 내린다.일반적으로 Server로 Zookeeper, Client로 Kafka로 구성분산 코디네이션 서비스?분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스→ 여러 서버 간의 동기화를 담당하여 클러스터 내의 서비스들이 안정적으로 동작할 수 있도록.. 2024. 5. 9.
[Kafka] 카프카 기본 용어 정리 Topic데이터가 들어갈 수 있는 공간테이블, 폴더와 유사한 개념Partition어떤 토픽에 대해서 producer/consumer가 병렬처리방식으로 분산저장되는 단위하나의 토픽에 여러개의 파티션 존재0번 인덱스부터 시작큐와 유사하게 동작Producer : 데이터를 쌓는다.Consumer :오래된 순서대로 가져감offset : 파티션 속 위치단, 컨슈머가 읽어도 데이터는 삭제되지 않는다.파티션 속에 데이터는 지정된 시간과 용량만큼 사용 후 삭제된다.늘릴수는 있지만 줄일 수는 없다.늘릴수록 컨슈머 분산가능파티션의 개수 >= 컨슈머의 개수replication (복제)높은 가용성(High Availibility)을 얻기 위해 각각의 partition을 각기 다른 브로커에 복제하는 역할서버에 장애가 생겼을 때 .. 2024. 5. 8.
[Docker] Docker-Compose로 MySQL 띄우기 ※ 간단한 게시판 프로젝트 진행하기 위한 데이터베이스 준비 ※ 1. docker-compose.yaml 파일 작성하기 version: '1' services: db: image: mysql:8.0 container_name: board-mysql restart: always ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: board MYSQL_USER: user MYSQL_PASSWORD: 123456 volumes: - ./db_data:/var/lib/mysql image 사용할 도커 이미지를 지정 MySQL 8.0 이미지를 사용한다. container_name 컨테이너의 이름을 설정 board-mysql 로 설정.. 2024. 2. 13.
[Docker] mySQL 띄우기 (Mac) ※ docker로 mySQL을 띄우는 과정에서 연결 오류를 해결하는 과정 ※ 1. mySQL을 띄우기 위한 명령어(Mac - M1 기준) docker run --platform linux/x86_64 -d -p 3306:3306 \ -e MYSQL_ALLOW_EMPTY_PASSWORD=true \ --name mysql \ mysql:5.7 2. 포트 오류 처음에 입력했을 때 도커 이미지를 다운받았고 위와 같이 이미 3306번 포트를 이미 사용 중이서 오류가 발생했다. 이전에 mySQL을 다운받아서 이와 같은 포트를 사용하는 것 같아서 mySQL을 종료시켰다. 3. 동일한 컨테이너 오류 위와 같이 포트를 비워주고 다시 실행해보려고 했는데 이번에는 이미 사용 중인 컨테이너라고 한다. 현재 실행 중인 컨테이.. 2024. 1. 29.
728x90