BackEnd
-
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) 값을 가질 수 있습니다. 이 옵션을 통..
-
03. 토픽(Topic)과 파티션(Partition)BackEnd/Kafka 2021. 11. 2. 04:31
1. 적정 파티션 개수 토픽의 파티션 개수는 카프카의 성능과 관련이 있습니다. 그렇기 때문에 토픽을 운영함에 있어 적절한 파티션 개수를 설정하고 운영하는 것이 중요합니다. 토픽 생성 시 파티션 개수 고려사항으로 데이터 처리량, 메시지 키 사용 여부 및 브로커, 컨슈머 영향도가 있습니다. 1) 데이터 처리량 데이터 처리 속도를 올리는 방법은 컨슈머의 처리량을 늘리는 것(서버의 사양을 올리는 스케일 업 또는 GC 튜닝 등)과 컨슈머를 추가해서 병렬처리량을 늘리는 것입니다. 파티션 개수는 프로듀서가 보내는 데이터양과 컨슈머의 데이터 처리량을 계산해서 정하면 됩니다. 프로듀서 전송 데이터량 < 컨슈머 데이터 처리량 X 파티션 개수 파티션 개수만큼 컨슈머 스레드를 운영한다면 해당 토픽의 병렬처리를 극대화할 수 있..
-
02. 카프카 아키텍처(Kafka Architecture)BackEnd/Kafka 2021. 10. 30. 18:00
주키퍼(Zookeeper) 주키퍼는 카프카의 메타데이터를 관리하는 데 사용됩니다. 카프카 브로커에 대한 정보를 확인할 수 있습니다(어떤 보안 규칙으로 통신하는지, jmx port 상태 정보, host 정보 등). 또한 컨트롤러 역할을 하는 브로커 및 저장된 토픽들을 확인할 수 있습니다. 주키퍼 쉘 명령어를 통해 사용할 수 있는 내부 명령어들에 대한 설명은 주키퍼 공식 문서 홈페이지에서 확인할 수 있습니다. 브로커(Broker) 카프카 브로커는 카프카 서버라고도 하며 카프카 클라이언트와 데이터를 주고받기 위해 사용하는 주체이자, 데이터를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 애플리케이션입니다. 하나의 서버에는 한 개의 카프카 브로커 프로세스가 실행됩니다. 데이터를 안전하게 ..