Kafka 15

Kafka Streams 어플리케이션 초기화

Kafka Streams를 개발하다 보면 매번 데이터를 새로 받아서 땡길 수 없기 때문에 초기화를 해주어야 하는 케이스가 종종 발생한다. 그럴때 아래 명령어를 통해 초기화를 하면 된다. ./kafka-streams-application-reset.sh --bootstrap-servers {브로커IP:PORT} --application-id {streams-id} --input-topics {토픽명} Reset-offsets for input topics [streams.test.topic] Following input topics offsets will be reset to (for consumer group search-ncms-streams) Topic: streams.test.topic Partit..

Kafka 2023.01.10

카프카 스트림즈(Kafka Streams)

기존에 카프카를 이용한 데이터 파이프라인 작업으로는 Producer -> Kafka -> Consumer 형태의 프로젝트들을 많이 하였는데 이번에 신규 프로젝트를 진행하게 되면서 카프카 스트림즈(Kafka Streams)를 이용한 경험을 정리 해본다. 카프카 스트림즈란? 토픽에 적재된 데이터를 실시간으로 변환하여 다른 토픽에 적재하는 라이브러리이다. 카프카의 스트림 데이터를 처리하기 위해 아파치 스파크, 아파치 플링크 등 다양한 오픈소스 어플리케이션들이 존재하지만 카프카 스트림즈를 사용해야 하는 이유는 카프카에서 공식적으로 지원하는 라이브러이기 때문이다. 카프카 클러스터와 완벽하게 호환이 되면서 편리한 기능(신규 토픽 생성, 상태 저장, 데이터 조인 등)들을 제공해준다. 카프카 스트림즈의 구조와 사용 방..

Kafka 2022.12.14

Kafka Consumer 멀티 쓰레드로 간단하게?

Multi Processor or Thread? Consumer를 만들다 보면 성능의 문제에 도달하게 된다. Kafka의 성능은 매우매우 빠르지만 1대의 Consumer를 통해 데이터를 저장하는 성능에는 서버 스펙으로는 한계가 있기 때문이다. 물론, End Point(ES, RDB, MongoDB 등)의 성능에도 한계가 있어 어느 정도 성능이 나오면 그 이상은 힘들다. 보통 토픽의 파티션과 컨슈머의 갯수의 공식은 아래와 같다. 파티션 수 >= 컨슈머 수 최고의 성능을 위해서는 파티션 수와 컨슈머의 수를 맞춰주는게 제일 좋아 보인다. 그렇다면 파티션 수와 컨슈머의 수를 1:1로 맞추기 위해서는 어떻게 해야 할까? 보통 이런 경우에는 2가지 해결책이 있다. 1. Multi Processor형태로 Consum..

Kafka 2022.01.28

Consumer Lag - Grafana 셋팅

Grafana 설치 [root@hostname grafana]# mkdir /grafana [root@hostname grafana]# cd /grafana [root@hostname grafana]# wget https://dl.grafana.com/oss/release/grafana-7.5.7-1.x86_64.rpm [root@hostname grafana]# sudo yum install grafana-7.5.7-1.x86_64.rpm grafana 시작 [root@hostname grafana]# systemctl start grafana-server http://IP:3000/ 접속 admin / admin ← 초기 계정 데이터 소스 설정( 엘라스틱 서치 ) 참고로 엘라스틱서치에서 burrow-..

Kafka 2022.01.27

Consumer Lag - burrow 설치

이번에는 컨슈머 Lag을 모니터링 할 수 있는 환경을 셋팅 해보려고 한다. Lag이란? 현재 컨슈머 그룹이 읽은 오프셋과 토픽의 마지막 오프셋간의 차이 그 중 첫번째로는 Kafka의 토픽에 대한 정보를 가져오는 burrow를 설치해야 한다. Burrow 란? 카프카 버로우는 링크드인에서 공개한 오픈소스 컨슈머 랙 체크 툴이다. 버로우를 카프카 클러스터와 연동하면 REST API를 통해 컨슈머 그룹별 컨슈머 랙을 조회할 수 있다. 컨슈머 랙 모니터링 burrow → Linkedin에서 오픈소스로 제공하는 컨슈머 랙 체크 툴 → 버로우 실행 시 Kafka, Zookeeper정보를 통해 랙 정보 자체 수집 → Kafka Consumer V0.9 이상부터는 offset 정보를 __consumer_offsets ..

Kafka 2022.01.27

Spring Kafka로 토픽 구독

Spring Kafka란? 카프카를 스프링 프레임워크에서 효과적으로 사용할 수 있도록 만들어진 라이브러리다. 기존 카프카 클라이언트 라이브러리를 래핑하여 만든 스프링 카프카 라이브러리는 카프카 클라이언트에서 사용하는 여러가지 패턴을 미리 제공한다. dependency 추가 org.springframework.kafka spring-kafka @KafkaListener 어노테이션 사용(Record 단위로 읽기 default모드) [ConsumerListener.java] @Component @Slf4j public class ConsumerListener { @KafkaListener(topics = "topicName", groupId = "topicGroupName") public void receiv..

Kafka 2022.01.26

카프카 토픽명 규칙

토픽 이름 제약 조건 빈 문자열 토픽 이름은 지원하지 않는다. 토픽 이름은 마침표 하나(.) 또는 마침표 둘(..)로 생성될 수 없다. 토픽 이름의 길이는 249자 미만으로 생성되어야 한다. 토픽 이름은 영어 대소문자와 숫자 0부터 9 그리고 마침표(.), 언더바(__), 하이픈( - ) 조합으로 생성할 수 있다. 이외의 문자열이 포함된 토픽 이름은 생성 불가하다. 카프카 내부 로직 관리 목적으로 사용되는 2개 토픽(__consumer_offsets, __transaction_state)과 동일한 이름으로 생성 불가능하다. 카프카 내부적으로 사용하는 로직 때문에 토픽 이름에 마침표(.)와 언더바(_)가 동시에 들어가면 안 된다. 생성은 할 수 있지만 사용 시 이슈가 발생할 수 있기 때문에 마침표(.)와 ..

Kafka 2022.01.26

토픽과 파티션, 레코드

토픽과 파티션, 레코드 토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위이다. RDB를 예로 들면 테이블이라고 볼 수 있을 것 같다. 토픽은 최소 1개 이상의 파티션을 소유하고 있으며 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 '레코드(record)'라고 부른다. 파티션은 카프카의 병렬처리의 핵심으로써 그룹으로 묶인 컨슈머들이 레코드를 병렬로 처리 할 수 있도록 해준다. 컨슈머의 처리량이 한정된 상황에서 많은 레코드를 병렬로 처리하는 가장 좋은 방법은 컨슈머의 개수를 늘려 스케일 아웃하는 것이다. 컨슈머 개수를 늘림과 동시에 파티션 개수도 늘려야 하며 처치량이 증가하는 효과를 볼 수 있다. 파티션 수와 컨슈머 수 공식 파티션 수 >= 컨슈머 수 파티션은 자료구조에서 접하는 ..

Kafka 2022.01.26