일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- K8S
- JPA
- 플러터 개발
- nestjs공부
- 코테공부
- 기술공부
- 플러터 공부
- 스프링부트공부
- 카프카
- 자바공부
- 코테준비
- 기술면접공부
- 스프링 공부
- 스프링공부
- DDD
- Flutter
- 스프링
- nestjs
- JPA 공부
- JPA공부
- querydsl
- JPA예제
- nestjs스터디
- 프로그래머스
- Kafka
- JPA스터디
- Axon framework
- 스프링부트
- 자료구조공부
- 알고리즘공부
- Today
- Total
목록Develop/[Kafka] (27)
DevBoi
데이터의 저장 카프카를 실행할때 Config/server.properties 의 log.dir 옵션에 정의한 디렉토리에 데이터를 저장한다. 토픽 이름과 파티션 번호의 조합으로 하위 디렉토리를 생성하여 데이터를 저장한다. -hello.kafaka 토픽의 0번 파티션에 존재하는 데이터를 확인 할 수 있다. log에는 메시지와 메타데이터를 저장한다. index는 메시지의 오프셋을 인덱싱한 정보를 담은 파일이다. timeindex파일에는 메시지에 포함된 타임스탬프 값을 기준으로 인덱싱한 정보가 담겨있다. 만약에 3개짜리 파티션을 만들게 되면, 해당 토픽이 3개로 저장된다.(나눠서가 아닌 복제형태로) 프로듀서는 메시지 (레코드)를 보내게 되는데 이 레코드 안에는 타임스탬프,메시지키,메시지 값 들의 정보가 들어가있..
1) 컨트롤러 클러스터의 다수 브로커 중 한대가 컨트롤러의 역할을 한다. 컨트롤러는 다른 브로커들의 상태를 체크하고, 브로커가 클러스터에서 빠지는 경우 해당 브로커에 존재하는 리더 파티션을 재분배한다. 카프카는 지속적으로 데이터를 처리해야 하므로, 브로커의상태가 비정상이라면 빠르게 클러스터에서 빼내는 것이 중요하다. 만약 컨트롤러 역할을 하는 브로커에 장애가 생기면 다른 브로커가 컨트롤러 역할을 한다. 2) 데이터 삭제 카프카는 다른 메시징 플랫폼과 다르게 컨슈머가 데이터를 가져가더라도 토픽의 데이터가 삭제되지 않는다. 브로커가 데이터를 삭제하는데, 이 단위를 로그 세그먼트라고 부른다. 이 세그먼트에는 다수의 데이터가 들어가 있기 떄문에 일반적인 데이터베이스 처럼 특정 데이터를 선별해서 삭제할 수 없다...
카프카 클러스터에는 브로커를 각기 다르게 설정할수있다. 이런한 클러스터들은 하나의 주키퍼 앙상블로 운영이 될 수가 있는데 아래와 같다. 하나의 주키퍼 앙상블은 여러대의 클러스터들과 매핑이되고 각 클러스터는 각기 다른 브로커수를 가진다. 카프카 클러스터를 운영하려면, 반드시 주키퍼가 필요하다. 3.0부터는 주키퍼가 없어도 클러스터 자체로 사용가능하다. 하지만, 예전 버전에서는 주키퍼가 필수였어서 앙상블이라는 개념이 도입되었다.
주키퍼 카프카 브로커는 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자 데이터를 분산 저장하여, 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션이다. 하나의 서버에는 한개의 카프카 브로커 프로세스가 실행된다. 하나의 서버에는 한개의 카프카 브로커 프로세스가 실행된다. 카프카 브로커 서버 1대로도 기본 기능이 실행되지만, 데이터를 안전하게 보관하고 처리하기 위해 3대이상의 브로커서버를 1개의 클러스터로 묶어서 운영한다. 그래서 하나의 클러스터에는 3개의 브로커를 사용하는게 기본이고 해당 클러스터를 늘리거나, 브로커의 수를 늘리는경우가 있다. 브로커는 한개당 프로세스이다. 한개로도 돌아가지만, 안전하게 사용하려면 한개의 브로커가 아니라 최소 3개이상의 브로커로 운영을 하는게 ..
카프카 생태계는 아래와 같다. 토픽을 가져가는 건 컨슈머가 가져간다. 토칙에 저장된 데이터를 Stateful, Stateless 하게 데이터를 처리해서 다시 토픽에 넣고싶다면? 카프카 스트림즈를 쓴다. 커넥트는 싱크커넥트와 소스 커넥트가 있다. 소스 커넥트는 프로듀서 역할을 하고 싱크 커넥트 같은 것들은 타겟 애플리케이션으로 데이터를 보내는 역할을 한다. 커넥트는 템플릿화를 하여 반복적으로 여러번 파이프라인 생성이 가능하다. MM2 이러메이커라는 것이 있고, 클러스터 단위로 토픽에 있는 데이터를 완벽하게 복제하기위해서 사용하기도 한다.
카프카가 왜 데이터 파이프라인으로 활용하게 되는지 살펴보자 1. 높은 처리량 카프카는 프로듀서가 브로커로 데이터를 보낼때와 컨슈머가 브로커로부터 데이터를 받을때 모두 묶어서 전송한다. 많은 양의 데이터를 송수신할 때 맺어지는 네트워크 비용은 무시할 수없다. 동일한 양의 데이터를 보낼때 네트워크 통신 횟수를 최소한으로 줄인다면, 동일 시간 내에 더 많은 데이터 를 전송할 수 있다. 또한 파티션 단위를 통해 동일 목적의 데이터를 여러 파티션에 분배하고, 데이터를 병렬 처리할 수 있다. 파티션 개수만큼 컨슈머 개수를 늘려서 동일 시간당 데이터 처리량을 늘리는 것이다. 최소한의 네트워크 비용으로 최대한의 데이터 전송이 가능하다는 것이 결론이다. 파티션은 최소 1개이상, N개까지 가능하다. 컨슈머 개수를 한개 늘..
링크드인에서 만들었다. 데이터를 생성하는 소스애플리케이션과 데이터가 최종 적재되는 타깃애플리케이션을 연결해야할때 사용한다. 소스 애플리케이션의 타깃애플리케이션의 개수가 점점 많아지면서 문제가 생겼다. 내부데이터 흐름을 개선하기 위해 한곳에 모아서 처리를 하는 방식이 가장 큰 특징이다. 카프카는 토픽이라는 개념을 바탕으로, 프로듀서와 컨슈머로 나눠지면 해당 파티션으로 전송이 된다. 프로듀서는 특정 데이터에 대해서 보내게 되면, 파티션 중 하나의 데이터가 저장되고 그 파티션의 내부구조는 큐 형태로 동일하게 구현이 되어있다. 파티션마다 다르게 큐에 담겨서 데이터가 컨슈머에게 전달이 되게 된다. (순차적으로) 큐에 데이터를 보내는 것이 프로듀서고 큐에서 데이터를 가져가는 것이 컨슈머 이다. 또한 컨슈머는 큐에 ..