Programming/Apache Kafka (17) 썸네일형 리스트형 아파치 카프카 실습 (Apache Kafka) / 스프링 카프카(Spring Kafka) - 스프링 카프카 컨슈머 스프링 카프카 컨슈머 스프링 카프카의 컨슈머는 기존 컨슈머를 2개의 타입으로 나누고 커밋을 7가지로 나누어 세분화했다. 타입은 레코드 리스너(MessageListener)와 배치 리스터(BatchMessageListener)가 있다. 리스너 종류에 따라 한번 호출하는 메서드에서 처리하는 레코드의 개수가 달라진다. 레코드 리스너 단 1개의 레코드를 처리한다. 스프링 카프카 컨슈머의 기본 리스너 타입이다. 배치 리스너 한 번에 여러개 레코드들을 처리할 수 있다. 두 리스너 외에도 각 리스너에서 파생된 형태가 존재한다. AcknowledgingMessageListener ConsumerAwareMessageListener AcknowledgingConsumerAwareMessageListener BatchAc.. 아파치 카프카 실습 (Apache Kafka) / 스프링 카프카(Spring Kafka) - 스프링 카프카 프로듀서 스프링 카프카 스프링 카프카는 카프카를 스프링 프레임워크에서 효과적으로 사용할 수 있도록 만들어진 라이브러리다. 기존 카프카 클라이언트 라이브러리를 래핑하여 마든 스프링 카프카 라이브러리는 카프카 클라이언트에서 사용하는 여러 가지 패턴을 미리 제공한다. 예를 들어, 컨슈머를 멀티 스레드로 운영하기 위한 스레드 풀 로직은 스프링 카프카를 사용하면 concurrency 옵션 하나만 추가하면 어렵지 않게 구현할 수 있다. 스프링 카프카 라이브러리를 스프링 부트 프레임워크와 함께 사용하기 위해서는 다음과 같이 build.gradle에 디펜던시를 추가한다. dependencies { // 스프링 카프카 라이브러리 디펜던시 // 스프링 카프카 라이브러리를 추가하면 카프카 클라이언트 라이브러리도 같이 포함되어 빌드된.. 아파치 카프카 실습 (Apache Kafka) / 컨슈머 랙 - 상세 개념 # 컨슈머 랙 컨슈머 랙(LAG)은 토픽의 오프셋(LOG_END_OFFSET)과 컨슈머 오프셋(CURRENT_OFFSET)간의 차이다. 프로듀서는 계속해서 새로운 데이터를 파티션에 저장하고 컨슈머는 자신이 처리할 수 있는 만큼 데이터를 가져간다. 컨슈머 랙은 컨슈머가 정상 동작하는지 여부를 확인할 수 있기 때문에 컨슈머 애플리케이션을 운영한다면 필수적으로 모니터링 해야하는 지표이다. 컨슈머 랙은 컨슈머 그룹과 토픽, 파티션별로 생성된다. 1개의 토픽에 3개의 파티션이 있고 1개의 컨슈머 그룹이 토픽을 구독하여 데이터를 가져가면 컨슈머 랙은 총 3개가 된다. 프로듀서가 보내는 데이터양이 컨슈머의 데이터 처리량보다 크다면 컨슈머 랙은 늘어난다. 반대로 프로듀서가 보내는 양이 컨슈머의 데이터 처리량 보다 적으.. 아파치 카프카 실습 (Apache Kafka) / 카프카 컨슈머 - 상세 개념 (멀티스레드 컨슈머) 멀티 스레드 컨슈머 파티션을 여러 개로 운영하는 경우 병렬처리를 위해 파티션 개수와 컨슈머 개수를 동일하게 맞추는 것이 좋은 방법이다. 토픽의 파티션은 1개 이상으로 이루어져 있으며 1개의 파티션은 1개 컨슈머가 할당되어 데이터를 처리할 수 있다. 파티션 개수가 n개라면 동일 컨슈머 그룹으로 묶인 컨슈머 스레드를 최대 n개 운영할 수 있다. 컨슈머를 멀티 스레드로 활용하는 방식은 크게 두 가지로 나눈다. 멀티 워커 스레드 컨슈머 멀티 스레드 전략 1. 카프카 컨슈머 멀티 워커 스레드 전략 데이터를 for 반복구문으로 처리할 경우 이전 레코드의 처리가 끝날 때까지 다음 레코드는 기다리게 된다. 만약 레코드별로 처리해야 하는 시간이 길 경우 더욱 오래 기다리게 디므로 처리 속도는 느려진다. 멀티 스레드를 사.. 아파치 카프카 실습 (Apache Kafka) / 카프카 프로듀서 - 상세 개념 (acks, 멱등성 프로듀서, 트랜잭션 프로듀서) 카프카 프로듀서 프로듀서는 카프카에 데이터를 저장하는 첫 단계이다. 카프카 클러스터는 3대 이상의 브로커로 이루어져 있어서 일부 브로커에 이슈가 생기더라도 데이터의 유실을 막을 수 있다. 그러나 유실을 막기 위해서는 프로듀서에서 제공하는 다양한 옵션을 함께 사용해야 한다. 프로듀서의 고급 활용법과 옵션별 동작 방식에 대해 자세하게 알아보자. 1. acks 옵션 카프카 프로듀서의 acks옵션은 0,1,all(또는 -1) 값을 가질 수 잇다. 이 옵션을 통해 프로듀서가 전송한 데이터가 카프카 클러스터에 얼마나 신뢰성 높게 저장할지 지정할 수 있다. acks옵션에 따라 성능이 달라질 수 있다. # acks = 0 acks를 0으로 설정하는 것은 프로듀서가 리더 파티션으로 데이터를 전송했을 때 리더 파티션으로 .. 아파치 카프카 실습 (Apache Kafka) / 토픽과 파티션 - 상세 개념 (적정 파티션 개수, 메시지 키 사용 여부, 토픽 정리 정책, ISR) # 토픽과 파티션 토픽에 대해 잘 이해하고 설정을 잘하는 것이 카프카를 통한 데이터 활용도를 높이는 것이다. 여러가지 운영상 고려사항을 알아보자. 1. 적정 파티션 개수 토픽의 파티션 개수는 카프카의 성능과 관련이 있다. 그렇기에 운영함에 있어 적절한 파티션 개수를 설정하고 운영하는 것이 매우 중요하다. 토픽 최초 생성 시 파티션의 개수를 정하는 데에 고려해야 할 점은 3가지 있다. # 토픽 생성 시 파티션 개수 고려사항 데이터 처리량 메시지 키 사용 여부 브로커, 컨슈머 영향도 파티션의 개수가 많아지면 많아 질수록 1:1 매핑되는 컨슈머 개수가 늘어나기 때문에 파티션은 카프카의 병렬처리 핵심이다. 파티션 개수를 정할 때는 해당 토픽에 필요한 데이터 처리량을 측정하여 정하는 것이 중요하다. # 데이터 처.. 아파치 카프카 실습 (Apache Kafka) / 카프카 커넥트 단일, 분산 모드 커넥트 1. 단일 모드 커넥트 단일 모드 커넥트를 실행하기 위해서는 단일 모드 커넥트를 참조하는 설정 파일인 connect-standalone.properties 파일을 수정해야 한다. 해당 파일은 카프카 바이너리 디렉토리의 config 디렉토리에 있다. # 커넥트와 연동할 카프카 클러스터의 호스트와 포트 설정 # 2개 이상일땐 콤마로 구분하여 설정 bootstrap.servers=my-kafka:9092 # 데이터를 카프카에 저장할 때나 가져올 때 변환할 때 사용 key.converter=org.apache.kafka.connect.json.JsonConverter value.converter=org.apache.kafka.connect.json.JsonConverter # 스키마 형태를 사용하고 싶지 않다.. 아파치 카프카 실습 (Apache Kafka) / 카프카 커넥트란 * 카프카 커넥트 카프카 오픈소스에 포함된 툴 중 하나로 데이터 파이프라인 생성 시 반복 작업을 줄이고 효율적인 전송을 이루기 위한 애플리케이션이다. 반복적인 파이프라인 생서 작업이 있을 시 매번 프로듀서, 컨슈머 애플리케이션을 개발하고 배포, 운영하기 때문에 비효율적이기에 특정한 작업 형태를 템플릿으로 만들어놓은 커넥터를 사용하면 효율적으로 사용할 수 있다. # 프로듀서 역할을 하는 소스 커넥터(source connector) # 컨슈머 역할을 하는 싱크 커넥터(sink connector) # 태스크 사용자가 커넥트에 커넥터 생성 명령을 내리면 커넥트는 내부에 커넥터와 태스크를 생성한다. 커넥터는 태스크를 관리하고, 태스크는 커넥터에 종속되는 개념으로 실적적인 데이터 처리를 한다. 이에 데이터 처리를 .. 이전 1 2 3 다음