본문 바로가기

아파치 카프카10

[아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-4장 스프링 카프카 스프링 카프카 스프링 프레임워크에서 카프카를 추상화하여 효과적으로 사용할 수 있게 만든 라이브러리 카프카 클라이언트에서 활용하는 여러 가지 패턴을 미리 제공함. 스프링 카프카 프로듀서 스프링 카프카 프로듀서는 카프카 템플릿 (Kafka Template) 이라는 클래스를 사용 카프카 템플릿은 프로듀서 팩토리 (Producer Factory) 클래스를 통해 생성 방법 스프링 카프카의 기본 제공 템플릿 application.yml 파일에 옵션을 지정하고 사용 사용자가 직접 카프카 템플릿을 프로듀서 팩토리로 생성 프로듀서 팩토리를 통해 만든 카프카 템플릿을 스프링 빈으로 등록 후 사용 프로듀서에 필요한 각종 옵션을 선언 후 사용 가능 스프링 카프카 애플리케이션 내부에 다양한 프로듀서 인스턴스를 생성하고 싶다면 .. 2023. 6. 6.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-3장 카프카 컨슈머 카프카 컨슈머 멀티 스레드 컨슈머 파티션을 여러 개 운영하는 경우, 데이터를 병렬 처리하기 위해서는 파티션, 컨슈머 개수를 동일하게 맞춰야 한다. 토픽의 파티션은 1개 이상으로 이루어짐 1개의 파티션은 1개 컨슈머가 할당되어 데이터 처리 파티션 개수가 n개라면, 동일 컨슈머 그룹으로 묶인 컨슈머 스레드를 최대 n개 운영 가능 n개의 스레드를 가진 1개의 프로세스를 운영 1개의 스레드를 가진 프로세스를 n개 운영 어떤 방식으로 운영할지는 개발자의 선택 공식적으로 지원하는 라이브러리인 자바는 멀티 스레드를 지원하므로, 자바 애플리케이션을 개발한다면, 멀티 스레드로 동작하는 멀티 스레드를 개발하고 적용하면 좋다. 멀티 스레드 컨슈머 운영 중 고려 사항 하나의 컨슈머 스레드에서 예외 상황 (OOM 등등) 이 터.. 2023. 5. 18.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-2장 카프카 프로듀서 카프카 프로듀서 카프카 프로듀서는 토픽에 데이터를 저장하는 첫 단계! acks 옵션 프로듀서의 옵션으로 acks 옵션 프로듀서가 전송한 데이터를 클러스터에 얼마나 신뢰성 있게 저장할 지 지정 가능 옵션에 따라 성능이 달라질 수 있다. acks = 0 프로듀서가 리더 파티션으로 데이터를 전송했을 때 리더 파티션으로 데이터가 저장되었는지 확인 하지 않는다 리더 파티션은 데이터가 저장된 이후, 몇 번째 오프셋에 저장되었는지 return 이 경우에는 데이터가 저장된 여부에 따른 응답을 받지 않음. 프로듀서는 데이터 전송 실패시, 재시도할 수 있게, retries 옵션 설정 가능 하지만 acks = 0 일 경우, 데이터 전송을 무조건 성공으로 간주, 해당 옵션은 무의미하다. 프로듀서와 브로커 사이의 네트워크 오류.. 2023. 5. 7.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 4-1장 토픽과 파티션 토픽과 파티션 토픽이 사라지면 카프카 파이프 라인은 동작하지 않음. 적정 파티션 개수 토픽의 파티션의 개수는 카프카 성능과 밀접한 관계가 있다. 파티션의 개수를 적절하게 설정하고 운영하자. 파티션 개수를 정할 때 고려할 점 데이터 처리량 메시지 키 사용 여부 브로커와 컨슈머의 영향도 파일 시스템을 사용하는 카프카는, 파티션의 수 만큼 파일에 접근한다. 운영체제 특성 상 프로세스 당 접근 가능한 파일 개수가 정해져 있다. 브로커가 접근하는 파일 개수를 안정적으로 유지하고 싶을 경우는, 카프카 브로커의 수를 늘리면 된다. 데이터 처리 속도를 올리자 컨슈머의 처리량 늘리기 컨슈머가 실행되는 서버를 스케일업 GC 튜닝 컨슈머는 (S3, 하둡, 오라클 등등) 의 시스템과 연동되므로, 일정 수준 처리량을 높이는데,.. 2023. 5. 5.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-6장 카프카 커넥트 카프카 커넥트란? 데이터 파이프라인 생성 시 반복 작업을 줄이고, 효율적인 전송을 위한 애플리케이션 예로, 파이프라인 생성 시, 프로듀서 | 컨슈머 애플리케이션을 계속 만들 수 있지만, 반복 생성 작업의 경우 계속적으로 배포 및 운영이 비효율적이다. 이때 사용하면 안성 맞춤 Source Connector 프로듀서 역할 토픽으로 데이터를 보낼 때 Sink Connector 컨슈머 역할 토픽의 데이터를 받아 저장할 때 예시로, Mysql 의 데이터를 보내고 저장할 때 (JDBC 도 마찬가지) 커넥터를 이용하여 파이프라인 생성 가능 특징 오픈 소스 커넥터는 커넥터 jar 를 다운로드하여 편리하게 사용 가능하다. gradle 의 Mysql connector 를 말하는건가? 커넥터를 이용하여, 파이프라인 생성 시.. 2023. 4. 20.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-5장 카프카 스트림즈 카프카 스트림즈 토픽에 저장된 데이터를 실시간으로 다른 토픽에 적재하는 라이브러리 카프카 클러스터와 완벽 호환 및 스트림 처리에 필요한 편리한 기능 제공 장애 발생 시 Exactly Once 하도록 장애 허용 시스템 장착 => 데이터 처리 안정성 Up. 개요 스트림즈 애플리케이션은 내부적으로 1개 이상의 스레드 생성 가능 스레드는 1개 이상의 태스크를 가진다. 스트림즈의 Task 는 스트림즈 애플리케이션을 실행하면 생기는 데이터의 최소 처리 단위 3개의 파티션으로 이루어진 토픽을 처리할 경우, 스트림즈 애플리케이션을 실행 시, 내부의 3개의 태스크가 생김. 카프카 스트림즈는 스트림즈 DSL (Domain Specific Language) 과 프로세서 API 2개의 방법으로 개발 가능 스트림즈 DSL 은 .. 2023. 4. 13.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3.4 장 카프카 클라이언트 카프카 클라이언트 카프카 클러스터에 명령을 내리거나 데이터를 송수신 하기 위해 사용한다. 카프카 프로듀서, 컨슈머, 어드민 클라이언트를 제공함. 엄연한 라이브러리이므로, 프레임워크나 애플리케이션에서 구현 후 실행. 프로듀서 API 카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 전송. 데이터를 전송할 때 리더 파티션 소유의 카프카 브로커와 직접 통신한다. 주요 특징 카브카 브로커로 데이터 전송 시, 내부적으로 파티셔너 및 배치 생성 단계를 거침. UniformStickyPartitioner 와 RoundRobinPartitioner 의 2개 파티션을 제공함. 메시지 키 유무에서 차이점이 발생한다. 프로듀서 동작에 특화된 UniformStickyPartitioner는 높은 처리량 및 낮은 .. 2023. 4. 9.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-2, 3장 토픽과 파티션, 레코드 토픽 데이터를 구분하기 위해 사용되는 단위 1개 이상의 파티션 소유 데이터를 Record 라 칭함 파티션 병렬처리의 핵심 컨슈머의 개수를 늘리는 스케일 아웃으로 한정된 컨슈머의 처리량을 보조 가능. Queue와 같은 구조 레코드 타임 스탬프, 메시지 키, 메시지 값, 오프셋, 헤더 구성 한번 적재된 레코드는 수정 불가 및 log retention or capacity에 따라 삭제 특징 생성된 시점에 Unix Time 설정 됨, 레코드 생성 시 타임 스탬프를 설정할 수 있다는 것에 유의 메시지 키를 이용하여 해시 값을 토대로 파티션 지정 가능 필요시 null 설정 메시지 값은 직렬화, 역직렬화 가능한 객체로 설정 => 동일한 형태로 상호 간 수행 컨슈머가 데이터를 가져갈 때, 오프셋을 사용 컨슈머 그룹이 .. 2023. 3. 27.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 3-1장 카프카 브로커와 클러스터 주키퍼 카프카 브로커 카프카 클라이언트와 데이터를 주고 받기 위해 사용하는 주체 장애가 발생하더라도 안전하게 사용하기 위해 데이터를 분산 저장하는 애플리케이션 보통 3대 이상의 클러스터로 운영 분산 저장 및 복제 카프카 브로커의 특징 전달 받은 데이터를 파티션에 저장 및 전달 파일 시스템에 데이터를 저장 메모리나 데이터 베이스가 아닌, 파일 시스템에 저장 => 속도 이슈를 캐싱으로 개선 데이터의 복제는 파티션 단위로 이루어짐 => 리더 파티션으로부터 받음 컨트롤러 다른 브로커들의 상태 체크 및 하나의 브로커가 제외될 경우, 리더 파티션을 재분배 데이터 삭제 카프카는 기본적으로 토픽 데이터 삭제하지 않음. 브로커만이 데이터를 삭제 가능함. => 삭제 용량 옵션 값 설정 가능 코디네이터 컨슈머 그룹 상태 체크 및 .. 2023. 3. 27.
[아파치 카프카 애플리케이션 프로그래밍 with 자바] 1장 들어가며 아파치 카프카 개발 공부를 하며 필수로 MQ, MB 정도는 하나 공부해야 겠다는 생각을 꾸준히 해왔다. 공부할만한 실력이 되는게 베이스가 될 시기와, 실제로 사용해야 될 시기가 딱 맞아 떨어져 바로 공부하기로 마음 먹었다. 카프카란? 카프카 내부에 데이터가 저장되는 파티션 동작은 FIFO 방식의 큐 자료구조와 유사하다. 큐에 데이터를 보내는 것이 ‘프로듀셔' 이고 데이터를 가져가는 것이 ‘컨슈머'. 카프카를 통해 전달할 수 있는 데이터 포맷은 거의 제한이 없다. 직렬화, 역직렬화를 통해 ByteArray 로 통신하므로 자바에서 선언한 모든 객체를 지원한다. (카프카 클라이언트에서는 기본적으로 ByteArray, ByteBuffer, Double, Long, String 타입에 대응한 직렬화.. 2023. 3. 13.
반응형