BackEnd/kafka
-
11. 스프링 카프카 프로젝트(Spring Kafka Project)BackEnd/kafka 2021. 11. 20. 11:37
Spring Boot와 Kafka를 이용하여 프로젝트를 구성해 보겠습니다. 제목과 내용을 입력하고 전송 버튼을 누르면 해당 이벤트를 카프카 토픽으로 전달하고, 컨슈머는 이를 파일로 저장합니다. 컨슈머는 파일이 아니라 HDFS(Hadoop Distributed File System), ElasticSearch, Redis 등 다양한 스토리지에 데이터를 적재할 수 있습니다. 전체소스는 github(https://github.com/HanseomKim/kafka/tree/master)을 참고하시면 됩니다. GitHub - HanseomKim/kafka Contribute to HanseomKim/kafka development by creating an account on GitHub. github.com 1..
-
10. 카프카 명령어(Command)BackEnd/kafka 2021. 11. 14. 08:55
윈도우(windows) 환경에서 카프카 명령어 실행은 설치폴더\bin\windows 하위의 bat 파일을 사용하고, 맥(Mac) 환경에서 카프카 명령어 실행은 설치폴더\bin 하위의 sh 파일을 사용합니다. kafka-topics 토픽이란 카프카에서 데이터를 구분하는 가장 기본적인 개념입니다. 마치 RDBMS(relational database management system)에서 사용하는 테이블과 유사하다고 볼 수 있습니다. 토픽에는 파티션(partition)이 존재하는데 파티션의 개수는 최소 1개부터 시작합니다. 토픽을 생성하는 상황은 크게 2가지가 있습니다. 첫 번째는 카프카 컨슈머 또는 프로듀서가 카프카 브로커에 생성되지 않은 토픽에 대해 데이터를 요청할 때, 그리고 두 번째는 커맨드 라인 툴로 ..
-
09. 카프카 설치(Kafka Installation)BackEnd/kafka 2021. 11. 13. 12:23
1. 카프카 바이너리 패키지 Download https://kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 카프카 바이너리 패키지는 2가지 버전이 존재하는데 각각 스칼라 2.12, 2.13 버전 컴파일입니다. 둘 다 실습환경에서 실행 시 기능상 차이가 앖으므로 스칼라 2.12로 컴파일된 패키지를 다운로드 합니다. 카프카는 윈도우 환경에서 약간의 버그가 존재하기에 실습환경에서만 사용을 권장합니다. 3.0.0 버전으로 설치 후 java.nio.file.AccessDeniedException 발생할 경우 2.8.1 버전으로 다운그레이드합니다. 2. 압축 해제 다운로드 받은..
-
08. 스프링 카프카 컨슈머(Spring Kafka Consumer)BackEnd/kafka 2021. 11. 6. 11:27
스프링 카프카 컨슈머는 기존 컨슈머를 2개의 타입으로 나누고 커밋을 7가지로 나누어 세분화 했습니다. 1. 타입 레코드 리스너(MessageListener): 단 1개의 레코드를 처리합니다. (스프링 카프카 컨슈머의 기본 리스너 타입) 배치 리스너(BatchMessageListener): 한 번에 여러 개 레코드들을 처리합니다. 매뉴얼 커밋(스프링 카프카에서는 커밋이라고 부르지 않고 'AckMode'라고 합니다. AcksMode: MANUAL, MANUAL_IMMEDIATE)을 사용할 경우 Acknowledging이 붙은 리스너를 사용하고, KafkaConsumer 인스턴스에 직접 접근하여 컨트롤하고 싶다면 ConsumerAware가 붙은 리스너를 사용하면 됩니다. 2. 메시지 리스너 종류와 파라미터 R..
-
07. 스프링 카프카 프로듀서(Spring kafka Producer)BackEnd/kafka 2021. 11. 5. 20:30
스프링 카프카(Spring kafka)는 카프카를 스프링 프레임워크에서 효과적으로 사용할 수 있도록 만들어진 라이브러리입니다. 기존 카프카 클라이언트 라이브러리를 래핑하여 만든 스프링 카프카 라이브러리는 카프카 클라이언트에서 사용하는 여러 가지 패턴을 미리 제공합니다. 스프링 카프카 라이브러리를 추가하면 관련 디펜던시로 카프카 클라이언트 라이브러리가 추가됩니다. 스프링 카프카 라이브러리는 어드민, 컨슈머, 프로듀서, 스트림즈 기능을 제공합니다. // build.gradle에 디펜던시 추가 dependencies { compile 'org.springframework.kafka:spring-kafka:2.5.10.RELEASE' } 스프링 카프카 프로듀서는 '카프카 템플릿(Kafka Template)' 클..
-
06. 카프카 클라이언트(Kafka Client with JAVA)BackEnd/kafka 2021. 11. 5. 09:35
카프카 클러스터에 명령을 내리거나 데이터를 송수신하기 위해 카프카 프로듀서, 컨슈머, 어드민 클라이언트를 제공하는 카프카 클라이언트를 사용하여 애플리케이션을 개발합니다. 카프카 클라이언트는 라이브러리이기 때문에 자체 라이프사이클을 가진 프레임워크나 애플리케이션 위에서 구현하고 실행해야 합니다. 아래 자바 애플리케이션에 대한 전체 소스코드는 각 제목에 링크가 걸려 있습니다. 1. 프로듀서 API 아래 SimpleProducer.java는 프로듀서의 가장 기본적인 형태로 개발된 애플리케이션입니다. 프로듀서 사용환경에 따라 특정 데이터를 가지는 레코드를 특정 파티션으로 보내야 하는 경우(kafka-producer-custom-partitioner)나 브로커 정상 전송 여부를 확인하는 프로듀서가 필요한 경우(동..
-
05. 카프카 컨슈머(Kafka Consumer)BackEnd/kafka 2021. 11. 4. 21:10
프로듀서가 전송한 데이터는 카프카 브로커에 적재됩니다. 컨슈머는 적재된 데이터를 사용하기 위해 브로커로부터 데이터를 가져와서 필요한 처리를 합니다. 컨슈머 그룹으로 묶인 컨슈머가 토픽을 구독해서 데이터를 가져갈 때, 1개의 파티션은 최대 1개의 컨슈머에 할당 가능합니다. 그리고 1개 컨슈머는 여러 개의 파티션에 할당될 수 있습니다. 이러한 특징으로 컨슈머 그룹의 컨슈머 개수는 가져가고자 하는 토픽의 파티션 개수보다 같거나 작아야 합니다. 컨슈머 그룹의 컨슈머에 장애가 발생하면 장애가 발생한 컨슈머에 할당된 파티션은 장애가 발생하지 않은 컨슈머에 소유권이 넘어갑니다. 이러한 과정을 '리밸런싱(rebalancing)'이라고 합니다. 리밸런싱은 컨슈머가 데이터를 처리하는 도중에 언제든지 발생할 수 있으므로 데..
-
04. 카프카 프로듀서(Kafka Producer)BackEnd/kafka 2021. 11. 2. 05:30
프로듀서는 카프카에 데이터를 저장하는 첫 단계이자 시작점입니다. 카프카에 필요한 데이터를 선언하고 브로커의 특정 토픽의 파티션에 전송합니다. 프로듀서는 데이터를 전송할 때 리더 파티션을 가지고 있는 카프카 브로커와 직접 통신합니다. 프로듀서는 데이터를 직렬화하여 카프카 브로커로 보내기 때문에 자바에서 선언 가능한 모든 형태를 브로커로 전송할 수 있습니다. 직렬화란 자바 또는 외부 시스템에서 사용 가능하도록 바이트 형태로 데이터를 변환하는 기술입니다. 직렬화를 사용하면 프로듀서는 자바 기본형과 참조형뿐만 아니라 동영상, 이미지 같은 바이너리 데이터도 프로듀서를 통해 전송할 수 있습니다. 1. acks 옵션 카프카 프로듀서의 acks옵션은 0, 1, all(or -1) 값을 가질 수 있습니다. 이 옵션을 통..