# zookeeper
Kafka cluster 구성
Zookeeper 설치 kafka를 동작시키기 위해서는 zookeeper가 필수적이다. zookeeper를 다음 link를 보고 설치를 해준다. https://velog.io/@dldydrhkd/Zookeeper-cluster-%EA%B5%AC%EC%84%B1 Kafka 설치 위 링크대로 zookeeper의 설치가 끝나고 zookeeper를 실행 시켰다면 kafka를 설치해보자. 우선 kafka 폴더를 생성한다. 아래 링크를 들어가 원하는 버전을 설치하고 압축을 해제한다. https://kafka.apache.org/downloads 경로 설정 kafka의 경로 설정을 위해 bashrc 파일을 연다 다음과 같이 경로를 추가한다. 수정된 사항을 적용 시킨다. kafka 환경 설정 cluster 구성을 위한 kafka 설정을 해준다. config 폴더에 들어간다. server.prope

Zookeeper cluster 구성
Zookeeper 설치 다음 링크에 들어가 zookeeper를 설치해준다. https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/ 폴더를 만들어 zookeeper를 설치하고 압축을 풀어준다. 경로 설정 zookeeper 경로를 설정해준다. 다음과 같이 작성해준다. 수정된 사항을 적용 시킨다. 환경 설정 zookeeper conf 폴더에 들어가 sample을 복사해준다. zoo.cfg를 수정하여 환경 설정을 해준다. > dataDir을 변경해준다. > zookeeper cluster 형성을 위해 server를 작성해준다. > master와 worker1의 ip는 /etc/hosts 파일에 작성되어 있다. id 설정을 해야한다. 각 서버에 들어가 myid 파일을 dataDir path에 만들어준다. 배포 master에 설치하고 설정

주키퍼는 뭘까
개발배경 분산 시스템에서는 클러스터간의 통신이나 데이터를 처리하는데 있어서 고민이 많이 있었습니다. > 분산 시스템에서의 고민거리 분산된 시스템 같의 정보를 어떻게 공유할 것인가 클러스터에 있는 서버들의 상태를 어떻게 체크할 것인가 분산된 서버들 간에 동기화를 위해 잠금(Lock)을 어떻게 처리할 것인가 이러한 고민과 분산 시스템을 처리해주고 관리의 필요성이 생겼습니다. 분산된 서버들끼리 통신할 때 리소스를 공유하려다 보면 자원 점유 문제가 발생하는데, 이를 처리하기 위한 대표적인 해결책으로 리소스 락을 볼 수 있습니다. 이 리소스는 Lock, Unlock하는데도 관리해주는 시스템이 필요합니다. 코디네이션 서비스는 분산 시스템 내에서 중요한 상태 정보나 설정 정보 등을 유지
Spring Boot FCM 전송 API 처리 속도 향상(Feat. Kafka)
안녕하세요 이번 시간에는 Kafka를 활용하여 FCM 전송 API의 처리 속도를 향상시키는 방법에 대해 알아보겠습니다. Kafka는 메시지 큐의 일종입니다. 메시지 큐란 컴퓨터 시스템 또는 어플리케이션 간에 비동기적으로 데이터나 작업을 교환하기 위한 통신 패턴입니다. 발신자와 수신자가 독립적으로 작동하며 데이터를 직접 주고받지 않고 중간 매개체를 통해 데이터를 전달할 수 있습니다. 메시지 큐는 크게 프로듀서, 컨슈머, 브로커로 이루어져 있습니다. 프로듀서란 메시지를 생성하고 메시지 큐로 보내는 역할을 담당하며 컨슈머는 메시지 큐에서 메시지를 가져와 처리하는 역할을 담당합니다. 브로커는 메시지 큐 시스템을 관리하고 중재하는 중간 매개체로 프로듀서가 메시지를 브로커로 보내고 컨슈머가 브로커에서 메시지를 가져오게 됩니다. 이 때 Pub/Sub 방식으로 **프로듀서가 브로커에 메시지를 전송하면 관련된 메시지를 구독하고 있는 컨슈머가 브로커에서 해당 메

Docker를 사용한 Kafka 설치
docker-compose.yml 생성 docker-compose 실행 위에 생성한 docker-compose.yml 파일 위치로 이동 > docker-compose up -d 생성이 완료된 후, Docker Desktop을 확인 redis 컨테이너는 예전에 만든 컨테이너임

엉금엉금 Kafka 도입기
서론 Kafka가 필요한 이유 MSA(MicroService Architecture)는 도메인 서비스간 분리가 되어 있어서 각 서비스간에 통신이 불가능하다. 하지만, 각 도메인 서비스를 나눴다고 해도 서비스간에 통신이 필요할수도 있다. ex) 주문 서비스에서 주문을 처리 했을 경우 재고 서비스에서 해당 재고를 차감시켜야하는 경우가 있다. → 사실 이 경우엔 도메인을 어떻게 나누냐의 차이이다. 위와같은 경우에서 주문 서비스만으로 다 처리가 불가능 하므로 서비스간 통신을 위한 무언가가 필요하다. MSA에서 서비스간 통신을 위해 지원하는 몇가지 방법이 있습니다. RESTful API (FeignClient) Message queue MSA 통신을 위한 큰틀 고르기 RESTful API (FeignClient) 동기 처리 방식으로 HTTP Endpoint에 대한 Interface를 생성하고 @

Kafka 의 주요기능
✏️ Kafka apache kafka 는 실시간으로 기록되는 스트림을 게시, 구독, 저장, 처리할 수 있는 분산형 이벤트 스트리밍 플랫폼이다. 여러 소스에서 data 스트림을 처리하고, 여러 사용자에게 전달하도록 설걔되었다. 즉, A 지점에서 B 지점까지 이동하는 것 외에 필요한 모든 곳에서 대규모 데이터를 동시에 이동시킬 수 있다. 📍 필요성 Data 를 전송하는 Source Application 과 Data 를 받는 Target Application 이 있을 때, 이것이 각각 하나밖에 없을 땐 아무 문제가 없지만, application 들이 점점 늘어나게 되면 data 를 전송하는 라인이 많아지게 된다. 이렇게 되면 복잡도가 증가하게 되고, 배포와 장애에 대응하기 어려준다. 각각의 application 들의 특징이 뚜렷하다 보니 data 처리에 있어서 파편화 문제도 심각해진다. 또한 변경사항이 생길 때 유
Zookeeper 설치
1. 계정 생성 2. hosts 등록 3. 계정 변경 4. Zookeeper 다운로드 5. 압축해제 6. link 설정 7. 설정 파일 변경(데이터 디렉터리 경로와 서버 설정) 8. myid 생성 9. zookeeper 서버 실행 (3서버 모두 실행) 10. 실행 확인 서버 중지

Kafka Zookeeper
1. Coordination System 분산 처리 시스템에서 분산된 시스템들 간의 정보를 어떻게 공유할 것인가? 클러스터 시스템에서 하위 노드를 관리하기 위해서는 각 하위 노드들의 Healthcheck Lock Processing 이 필요하다. 이러한 문제를 해결하는 시스템이 coordination system이고, 대표적인 오픈 소스 솔루션에 Zookeeper가 있다. coordination system은 분산 시스템 내에서 중요한 상태 정보나 설정 정보를 유지하기 때문에, coordination system의 장애는 전체 시스템의 장애로 이어진다. 따라서 이중화 등을 이용한 고가용성을 제공해야 한다. > Coordination Service System: 분산 시스템 내에서 중요한 상태 정보나 설정 정보들을 유지, 클러스터에 있는 서버들의 상태를 체크, 분산된 서버들 간의 동기를 위한 lock 처리 등을 관리하는 시스템. 2. Zookee

Chatper2. Kafka 빠르게 시작해보기
Kafka 실행 server.properties ZooKeeper 실행 Kafka를 실행하는데 필요한 필수 Application 분산 코디네이션 서비스를 제공 Kafka의 Cluster Leader 정보, Controller 정보를 담고있다. zookeeper.properties kafka-topic.sh Topic 생성 Topic 목록 조회 Topic 상세 조회 Topic 옵션 수정 kafka-topic.sh 파티션 개수 변경 kafa-configs.sh 토픽 삭제 정책 (리텐션 기간) 변경 Topic Dynamic Configs 조회 kafka-console-producer.sh Topic에 넣는 테이터를 레코드(record)라고 부르며,
Kafka / Zookeeper
Kafka 발행-구독(Publish-Subscribe)모델을 기반으로 동작 Kafka의 특징 및 기존 MQ와의 차이점 대용량의 실시간 로그 처리 - TPS가 매우 우수 분산 시스템을 기본으로 설계되었기 때문에 분산 및 복제 구성이 쉬움 > TPS란? TCP 기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드 감소 기존 MQ는 다수의 메세지 전송시 각 메세지를 개별로 전송해야함 -> Kafka는 다수의 메세지를 batch형태로 broker에서 한번에 전달 -> TCP/IP 라운드 트립 횟수 줄일 수 있음 > batch형태란 TCP/IP라운드 트립이란 기존 MQ의 메세지 전송 방식 궁금함 메세지를 파일 시스템에 저장 기존 MQ는 메모리에 저장 파일 시스템에 저장시 좋은 점 데이터의 영속성 보장 메세지를 많이 쌓아두어도 성능이 크게 감소하지 않음 -> 주기적인 batch작업에 사용할 데이터를 쌓아두는 용도로 사용 가능 처리된 메세지를 삭제하
Zookeeper란?
Zookeeper란? 분산 애플리케이션을 위한 분산 코디네이션 서비스 분산 애플리케이션을 위한 동기화, 설정, 그룹, 네이밍에 대한 추상화된 수준의 서비스를 제공 이를 API로 제공해 사용하기 쉽고, 데이터 모델도 디렉토리 구조를 이용하고 있어 이해하기 쉽다는 장점 분산 시스템에 있어서 코디네이션 기능은 매우 중요하지만, Lock, Race condition, Deadlock 등의 이유로 구현하기 까다로움. Zookeeper를 이용하면 코디네이션은 주키퍼에게 맡기는 형태로 쉽게 구현이 가능 Zookeeper의 주요 기능과 특징 ZNodes 파일 시스템과 유사한 shared hierarchical namespace를 통해 분산 프로세스가 상호작용할 수 있게 함 네임스페이스는 zookeeper용어로 데이터 레지스터로 구성. 저장용으로 설계된 파일시스템과 달리 데이터가 메모리에서 처리되기 때문에(파일형태로 저장해서 휘발되지는

Hadoop HA 구성하기 with Zookeeper (3) - Zookeeper 설정, Hadoop 실행
Zookeeper 폴더 생성 zoo.cfg server1, server2 모두 실행해주세요. 아래 내용 수정 후 저장. server1에서만 추가로 설정. server 1에서는 zookeeper를 2대 설정해야 하므로, zoo.cfg와 zoo2.cfg로 설정파일을 2개 만들어준다. 아래 내용 수정 후 저장. myid 설정 Hadoop 실행 위의 코드들은 맨 처음 실행할 때만 진행해주면 되고, 그 이후부터는 다음 명령어로 hadoop을 종료하고 hadoop을 실행하면 된다. hadoop 실행한 후 jps를 찍어보았을 때 다음과 같이 보이면 됩니다. 
Hadoop HA 구성하기 with Zookeeper (2) - Hadoop 설정 파일
서버 간 통신을 위한 사전 작업 hosts 파일 설정 해당 작업은 server1, server2 둘 다 해주시면 됩니다. ssh 키 생성 및 교환 서버 끼리의 통신을 위해 ssh 키를 생성한 후, 다른 서버에게 전달해주는 작업을 하겠습니다. 해당 작업은 server1, server2 둘 다 해주시면 됩니다. 방화벽 설정 | App | port | App | port | | --- | --- | --- | --- | | Namenode | 9000 | Zookeeper TCP | 2181 | | Namenode Web UI | 9870 | Zookeeper 서버 동기화(앙상블 구성) | 2888 | | NameNode RPC | 8020 | Zookeeper 리더 선출 | 3888 | | JournalNode | 8485 | Kafka broker | 9092 | | Yarn Web UI | 8088 | Datanode

Hadoop HA 구성하기 with Zookeeper (1) - Java, Hadoop, Zookeeper 설치
Hadoop HA 구성하기 시리즈는 총 3편으로, HA의 의미 및 설치 방법 순으로 글을 작성할 예정입니다. 아래와 같은 순으로 글이 전개될 예정이니 순서대로 혹은 필요한 내용만 보시면 될 것 같습니다. [1] HA 의미 및 Java, Hadoop, Zookeeper 설치 [2] Hadoop 설정 및 ssh, ufw 설정 [3] Zookeeper 설정 및 Hadoop 실행 개요 Hadoop HA란? 우선적으로 용어 설명부터 해야하는데, HA란 High Availability로서 고가용성으로 직역을 많이들 한다. 사실 고가용성이란 단어만 들었을 때는 그 의미가 와닿지 않는데, Hadoop이 오랜 시간동안 정상 작동하게끔 만드는 것이라고 이해하면 편하다. HA 개념이 나오기 전에는? Hadoop HA은 Hadoop 2.x 버전부터 나오기 시작했는데, 그 이전의 하둡은 클러스터 당 네임노드가 한 대 뿐이라 네임노드 머신이 다운되면 해당 머신을 재가동시

[Spring, ReactorKafka, Coroutine] 어플리케이션 종료 시 zookeeper connection 이슈 해결
실무에서 consumer 어플리케이션을 배포할 때마다 에러가 발생해왔다. 일부 데이터의 누락도 발생했지만, 중요하지 않은 데이터이며 데이터 정합성 검증 배치 job + 보정하는 api를 만들어두었기에 크게 신경은 쓰지 않고 있었다. 그래도 땜빵(?) 보다는 근본적으로 문제를 해결해보자. 참고로 Spring-kafka 를 사용하면 graceful-shutdown 옵션으로 간단하게 되는걸로 알지만 Reactor-kafka-listener 를 사용하면 별도로 graceful-shutdown 을 구현해야 하는걸로 안다 ㅠㅠ 이번 포스팅에서는 spring의 동작 과정을 중심으로 아래 주제를 다뤄본다. 어떤 에러가 발생했는가? 첫 번째 시도 (실패 사례) Q. 왜 해결이

TIL | Zookeeper 란?
What is Zookeeper? > - 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트 주키퍼는 직접 애플리케이션 작업을 조율하지 않고 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다. 각 애플리케이션의 정보를 중앙 집중화하고 구성관리, 그룹 관리 네이밍, 동기화 등의 서비스를 제공한다. 주키퍼의 데이터는 메모리에 저장되고, 영구 저장소에 스냅샷을 저장한다. 분산 코디네이션 서비스란? 분산 시스템에서 시스템 간의 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 락 등을 처리해주는 서비스 Architecture > 주키퍼는 분산 시스템의 일부분이

Windows Docker 주요 명령어 꿀팁 정리
알고있는 지식도 다시 한번 Developer 김종철 입니다. docker 환경으로 kafka를 사용하여 아래와 같이 Rest API를 이용한 구성을 만들려고 하고 있습니다. docker를 공부하며 주요 명령어 및 꿀팁들을 정리해보려 합니다. 1. docker 설치를 위한 구성 준비 1-1. 제어판 > 프로그램 및 기능 > windows 기능 켜기/끄기 > Hyper-V, Linux 용 W

[Zookeeper] 1. 개념 정리
회사에서 Zookeeper를 사용해 보았다. 사용하게 된 첫번째 이유는 Kafka Clustering을 위해서였다. 그 뒤로 개별 서비스에서 HA 기능이 필요하게 되면서 코디네이션 툴로 Zookeeper를 사용하게 되었다. 이에 Zookeeper는 무엇인지, Zookeeper에서 제공하는 기능에는 어떤 것들이 있는지 찾아보고 정리하고자 한다. 먼저 Zookeeper를 간단하게 3가지 키워드로 정의해보자. Zookeeper의 소개글에서 굵직한 키워드들을 살펴보면, > 1. Centralized Service Distributed Applications Race Conditions 이렇게 3가지 키워드로 정리해 볼 수 있을 것 같다. 하나하나 톺아보도록 하자. . 1. Centralized Service Centralized는 중앙 집중식이란 뜻이다. [중앙 집중식](https://dictionary.ca
statefulset zookeeper 클러스터 구축
zoo_statefulset.yaml 이건 쿠버네티스 공식문서에서 친절하게 설명해준다. 링크 2. pv 생성 replicas에서 설정한 수 만큼 생성 현재 영구 볼륨이 노드에 존재하기 때문에 노드가 다운되면 볼륨 유지가 안된다. 추후에 동적 프로비저닝 사용 예정