Kafka

시스템 간 강결합은 어떻게 없앨 수 있을까? 쇼핑몰에서 구매 취소를 하면 환불 처리가 되어야 한다. 이때 환불기능을 실행하는 주체는 주문 도메인이 될 수 있으며, 환불 기능을 실행하기 위해서 환불 도메인 서비스를 파라미터로 전달받아 실행할 수 있다. class Order { // 외부 서비스 실행을 위해 도메인 서비스를 파라미터로 전달 받음 fun cancel(refundService: RefundService) { verifyNotYetShipped() this.state = OrderState.CANCELED this.refundStatus = State.REFUND_STARTED try { refundService.refund(getPaymentId()) this.refundStatus = Stat..
어떠한 문제가 발생하였고, 그 원인을 찾아 헤맬때는 왜 이런 현상이 발생했는지 이해가 되지 않고 막막할 때가 많다. 하지만 문제가 발생한 원인을 생각하면서 차근차근 하나씩 의심가는 부분들을 확인하다보면 의외로 아주 간단하고, 아주 창피하고, 아주 어이없는 실수인 경우가 대부분이다. 오늘은 내가 겪은 창피하면서도 어이없는 실수를 기록해보려 한다. 상황 설명 상황을 아주 디테일하게 설명하진 못하지만, 아래 같은 기능을 갖는 시스템이 있다. A시스템에서 B시스템을 호출하는 API가 있다. B시스템에서는 장애가 자주 나기 때문에, 응답값을 받지 못하는 경우 별도의 Front화면에서 사람이 재시도를 할 수 있는 기능이 있다. Front에서 실패한 API건을 체크하여 재시도 버튼을 클릭하면 B시스템이 제공하는 AP..
로컬 환경 zookeeper 3대(localhost:2181, localhost:2182, localhost:2183) kafka broker 3대(localhost:9092, localhost:9093, localhost:9094) 프로듀서란?? 메시지를 생산(produce)해서 카프카의 토픽으로 메시지를 보내는 역할을 하는 애플리케이션, 서버 등을 모두 프로듀서라고 한다. 주요기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다. 메시지를 보낼 때 키 값을 정해서 메시지를 보낼 수 있는데, 해당 키를 가진 모든 메시지를 동일한 파티션으로 전송할 수 있다. 키 값이 존재하지 않는다면, Round-Robin 방식으로 파티션에 균등 분배하게 된다. 1. 콘솔 프로듀서로 메시지..
2021.06.20 - [프로그래밍 노트/인프라] - [kafka] Docker 사용하여 카프카 실행하기 [kafka] Docker 사용하여 카프카 실행하기 실행에 앞서 PC에 docker가 설치되어 있어야 한다. 1. kafka-docker repository clone $ git clone https://github.com/wurstmeister/kafka-docker 2. docker-compose-single-borker.yml 수정 해당 compose 파일을.. cornswrold.tistory.com 기존포스팅에서는 zookeeper 1대, kafka 1대로 구성된 카프카 실행환경을 구성하였었다. kafka를 학습하다보니, 로컬에서 클러스터로 구성된 환경이 필요했는데 다행히 docker-com..
2021.06.30 - [프로그래밍 노트/인프라] - [kafka] 주키퍼(zookeeper) 설치 및 실행 (환경설정) 카프카 설치하기 $ wget http://apache.mirror.cdnetworks.com/kafka/2.8.0/kafka_2.12-2.8.0.tgz $ tar xzvf kafka_2.12-2.8.0.tgz $ ln -s kafka_2.12-2.8.0 kafka 카프카 환경설정 환경설정 파일을 열어 필요한 정보들을 수정해야 한다. 서버별 브로커 아이디 카프카 저장 디렉터리 주키퍼 정보 1. 서버별 브로커 아이디 카프카도 주키퍼가 myid를 지정한것과 비슷하게 id를 매칭시켜야 한다. 3대의 서버가 있다고 가정해보자. 아래와 같이 broker.id를 매핑한다고 기억해두었다가 나중에 카..
실행에 앞서 PC에 docker가 설치되어 있어야 한다. 1. kafka-docker repository clone $ git clone https://github.com/wurstmeister/kafka-docker 2. docker-compose-single-borker.yml 수정 해당 compose 파일을 사용하면 zookeeper-1대, broker(kafka)-1대 를 실행시킬 수 있다. multi broker는 나중에 기회가 되면 셋팅 해보자. 로컬에서 실행하므로 KAFKA_ADVERTISED_HOST_NAME을 127.0.0.1로 수정한다. version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181"..
2021.04.30 - [프로그래밍 노트/인프라] - [kafka] 카프카 특징 (데이터 모델, 디자인 특징) 카프카의 고가용성과 리플리케이션 카프카는 높은 가용성을 보장하기 위해 리플리케이션(Replication)기능을 제공한다. (각각의 파티션을 리플리케이션함) 리플리케이션 팩터와 리더, 팔로워의 역할 카프카에는 리플리케이션 팩터(Replication Factor)라는 것이 존재하며, 변경은 설정 파일에서 할 수 있다. (server.properties) default.replication.factor = 2 (기본값은 1로 설정되어 있음) peter 토픽에 대해 리플리케이션 구성한 모습이며, peter 토픽은 브로커1과 브로커2에 위치 원본 - 리더 / 복제본 - 팔로워 용어를 사용 리더 - 읽기/..
2021.05.04 - [프로그래밍 노트/인프라] - [kafka] 카프카 고가용성과 리플리케이션(장애 극복 방법) 대용량의 실시간 데이터 처리 배치 전송, 파티션, 분산 기능 구현 고가용성 중앙 시스템 역할을 하는 중요한 서비스에서 장애가 발생하더라도 서비스에 영향이 없도록 데이터의 안정적인 저장을 위해 리플리케이션 기능과 분산된 서버에서 자동으로 파티션의 리더를 선출하는 기능을 구현 카프카 디자인 특징 1. 분산 시스템 분산 시스템 장점 단일 시스템보다 더 높은 성능 하나의 서버(노드) 등이 장애가 발생하면 다른 서버(노드)가 대신 처리 시스템 확장 용이 2. 페이지 캐시 처리량을 높이기 위한 전략으로 페이지 캐시 기능 추가 빠른 액세스를 하기 위해 OS의 페이지 캐시를 이용하도록 디자인 페이지 캐시..
유튜브로 카프카 관련 영상을 봤는데, 주키퍼란 아이가 등장하였다. 주키퍼에 대해 간략히 조사해보았다. 일단, 주키퍼를 알아보기 위해 카프카가 어떻게 구성되어 있는지 알아야 한다. 카프카 구성 카프카는 크게 프로듀서, 카프카(브로커), 컨슈머, 주키퍼로 분류할 수 있다. 프로듀서 : 카프카와 통신하면서 메시지를 보내는 역할 컨슈머 : 카프카와 통신하면서 메시지를 가져오는 역할 주키퍼 : 컨슈머와 통신, 카프카의 메타데이터 정보를 저장, 카프카의 상태관리 등 목적으로 이용 카프카 주키퍼? 분산 애플리케이션을 사용하게 되면, 분산 애플리케이션 관리를 위한 안정적인 코디네이션 애플리케이션이 추가로 필요하게 된다. 안정적인 코디네이션 서비스로 검증된 주키퍼를 많이 사용하게 된다. 주키퍼 는 분산 애플리케이션을 위..
깡냉쓰
'Kafka' 태그의 글 목록