프로그래밍 노트/kafka

Embedded Kafka 를 사용하게 된 이유외부 Kafka 서버에 의존하지 않고 안정적이고 독립적으로 테스트 하는 방법이 필요하였음타부서에서 발행하는 message를 consume하여 처리하기로 하였는데, 개발계에 카프카 서버가 셋팅되지 않음내가만든 @KafkaListener 가 정상 동작하는지 검증필요상황@KafkaListener를 통하여 consume & 비즈니스 로직 실행 코드는 완성된 상태일정상 개발계 kafka 셋팅이 완료되었을 때 테스트 지원이 힘든 상황이여 테스트 코드로 검증을 대신해야함역직렬화(deserializer)가 정상 동작 하는지여러 consumer configuration이 정상 동작 하는지Embedded Kafka를 활용한 간단 테스트참고) https://docs.spring..
프로듀서 주요 옵션bootstrap.servers카프카 클러스터에 연결하기 위한 호스트와 포트정보로 구성된 리스트호스트 이름:포트, 호스트 이름: 포트kafka01:9092,kafka02:9092acks프로듀서가 카프카 토픽의 리더에게 메시지를 보낸 후 요청을 완료하기 전 ack(승인) 수.해당 옵션의 수가 작으면 성능이 좋지만, 메시지 손실 가능성이 있고, 반대로 수가 크면 성능이 좋지 않지만 메시지 손실 가능성도 줄어들거나 없어짐acks=0프로듀서는 서버로부터 어떠한 ack도 기다리지 않음. 전송 실패에 대한 결과, 재요청 설정이 적용되지 않음. 빠르게 메시지를 보낼 수 있어 높은 치리량을 얻을 수 있음acks=1리더는 데이터를 기록하지만, 모든 팔로워는 확인하지 않음. 이 경우 일부 데이터의 손실이..
로컬 환경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-compose..
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를 매핑한다고 기억해두었다가 나중에 카프카 환경설정에 적용해..
주키퍼 설치하기$ wget http://apache.mirror.cdnetworks.com/zookeeper/stable/apache-zookeeper-3.6.3-bin.tar.gz$ tar xzvf apache-zookeeper-3.6.3.tar.gz$ ln -s apache-zookeeper-3.6.3 zookeeper주키퍼는 애플리케이션에서 별도의 데이터 디렉토리를 사용이 디렉토리에는 지노드의 복사본인 스냅샷과 트랜잭션 로그들이 저장지노드의 변경사항이 발생하면, 변경사항은 트랜잭션 로그에 추가로그가 어느 정도 커지면, 현재 모든 지노드의 상태 스냅샷이 파일시스템에 저장스냅샷은 모든 이전 로그들을 대체중요한 디렉토리이기 때문에 설치 경로와는 다른 경로로 설정하는 것이 바람직하다. 보통 /data 경로..
실행에 앞서 PC에 docker가 설치되어 있어야 한다.1. kafka-docker repository clone$ git clone https://github.com/wurstmeister/kafka-docker2. 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:2..
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' 카테고리의 글 목록