목록Data Engineering & DataOps/Kafka (13)
without haste but without rest
아파치 카프카 애플리케이션 프로그래밍 with 자바 Kafka Connect 카프카에 기본적으로 포함되어 있는 애플리케이션이다. 프로듀서, 컨슈머 애플리케이션을 직접 개발할 필요없이 템플릿 기반으로 사용할 수 있다. source, sink에 대한 플러그인은 confluent hub에서 검색해서 찾을 수 있다. 1. 아키텍처에 대한 간단한 요약 유저가 커넥트에 커넥터 생성을 요청하면 커넥트는 내부에 커넥터와 태스크를 생성한다. 커넥터는 태스크를 관리하고, 태스크는 커넥터에 종속되는 개념으로, 데이터를 처리를 담당 한다. 유저는 Converter와 Transform 기능을 옵션으로 추가할 수 있다. 컨버터는 데이터 처리를 하기 전에 스키마를 변경하도록 돕는다. JsonConverter, StringConve..
아파치 카프카 애플리케이션 프로그래밍 with 자바 MirrorMaker2 서로 다른 두 개의 카프카 클러스터 간 토픽을 복제하는 애플리케이션이다. (카프카 binary 디렉토리 내에 mirrormaker를 확인할 수 있다.) 프로듀서, 컨슈머 단에서 미러링을 구현할 수도 있지만, 파티셔닝 정보가 변경되는 등의 로직을 직접 구현하는 것이 쉽지 않다. 미러메이커2는 토픽의 데이터를 복제하고 설정까지도 복제해서 파티션의 변화, 토픽 설정값의 변화도 동기화하는 기능을 제공한다. + 미러메이커1은 복제하기 전 데이터와 복제된 데이터의 파티션 정보가 달랐으며 복제하는 토픽이 달라지면 수정하기 위해 애플리케이션을 재시작해야 했다. 또한 exactly-once 를 보장하지 못했다.
Message Key 카프카 브로커에 메세지를 전송할 때 Topic, Key, Value 값을 보내게 된다. 이때 토픽과 밸류는 직관적이지만 키가 굳이 필요한 이유에 관해서 궁금했다. 왜 쓰는 걸까? Key는 메시지의 종류를 나타날 때 사용하고, 데이터의 처리 순서와 밀접한 관련이 있다. 동일한 키를 동일한 파티션으로 보내는 것이 주요한 목적이다. 간단한 예시로, 토픽의 파티션 개수가 2개 이상이 되는 순간 오프셋의 순서를 보장할 수가 없다. 따라서 트랜잭션 데이터의 순서가 뒤바뀔 수 있는 위험이 존재한다. 이때 레코드의 Primary와 같은 고유값을 키로 이용한다면 동일한 파티션으로만 전송하게 되므로 특정 파티션의 바틀넥 현상에 의해서 순서가 역전되는 문제를 회피할 수 있다. 예를 들어서 uuid가 0..
요약 브로커 3대와 주키퍼 1대로 구성된 카프카 클러스터 도커 컴포즈 템플릿 컨테이너의 비정상적인 종료에 따른 데이터 유실을 막기 위해 오프셋 데이터와 로그 디렉토리를 호스트 볼륨에 마운팅 했다. version: "2" services: zookeeper: image: docker.io/bitnami/zookeeper:3.7 hostname: zookeeper ports: - "2181:2181" environment: - ALLOW_ANONYMOUS_LOGIN=yes volumes: - ./zookeeper/bitnami/zookeeper:/bitnami/zookeeper kafka-0: image: docker.io/bitnami/kafka:2.8.1 hostname: kafka-0 restart: ..
카프카 핵심 가이드 - 실시간 데이터와 스트림 프로세싱 아파치 카프카 애플리케이션 프로그래밍 with 자바 0. Kafka 카프카는 이벤트 기반 분산 스트리밍 플랫폼이다. 비슷한 서비스로 GCP의 Pub/Sub, AWS의 Kinesis 등이 있다. 1. Unified 카프카를 사용하면 파편화된 데이터 파이프라인을 중앙집중화된 심플한 아키텍처로 개선할 수 있다. (1). 복잡한 데이터 파이프라인 예시 이미지 원본 위 구조는 각각의 프로세스가 파편화되어있는 상태로 데이터 처리 프로세스가 추가되는 경우 점점 더 구조가 복잡해질 수 밖에 없다. (2). 중앙집중화된 데이터 파이프라인 예시 카프카를 사용하는 아키텍처는 카프카 브로커가 모든 프로세스의 매개자 역할을 하는데, 이 과정에서 아키텍처가 매우 단순해진다...
에러 로그를 보니 rdkafka.h 파일이 없어서 해당 라이브러리 설치가 안된다고 하는데 아무리 찾아봐도 /usr/local/include 디렉토리가 없다. 조금 오래된 게시글을 보니 brew 사용해서 librdkafka를 설치하라고 하는데, 내 맥에서는 작동을 안한다. 구글링 하던 중 아래 게시글을 발견했고 해결했다. 한국분이 질문을 올리셨는데 넘모 감사할따름.. 위 리포 클론해서 그대로 진행하면 /usr/local/include 경로에 필요한 의존성 파일들을 설치한다. 이후 다시 pip 이용해서 confluent_kafka 인스톨을 진행하면 문제없이 잘 설치된다. Install failed in Apple Silicon · Issue #1025 · confluentinc/confluent-kafka-..
카프카는 성능 테스트를 기본적으로 제공하고 있다. 아래 과정으로 현재 구축한 카프카 클러스터의 성능이 어느정도 나오는지 확인할 수 있다. 해당 쉘 파일은 카프카를 설치한 하위 디렉토리 bin에 있다. 0. create topic 앞서 구축한 테스트용 카프카 클러스터의 브로커는 3대이므로 복제 개수는 3개이며 파티션도 3개로 토픽을 생성했다. (브로커 개수의 2배인 파티션 6개로 증가시켰을 때 근소하게 성능 향상이 있었다. 12개는 6개와 성능 차이가 없었다..이 부분은 더 자세히 파악하고 추가할 예정이다.) 토픽 이름은 간단하게 bmt로 설정 bin/kafka-topics.sh --create --bootstrap-server \ broker-server1:9092,broker-server2:9092,b..
OS: ubuntu 20.04 LTS kafka: 2.5.0 broker: 3대 각 서버에 카프카 설치를 한다. 카프카 2.6버전 이후부터 주키퍼가 빠졌는데, 해당 테스트에서는 주키퍼를 사용하는 2.5버전을 사용했다. 주키퍼 설정, 카프카 설정은 기본옵션을 사용했으며 각 서버에 동일하고, 포트 설정 정도만 변경해준다. 1. kafka install wget http://archive.apache.org/dist/kafka/2.5.0/kafka_2.13-2.5.0.tgz tar -zxvf kafka rm kafka_2.13-2.5.0.tgz 2. 주키퍼 설정 # 카프카 설치한 디렉토리 패스로 이동 vi config/zookeeper.properties 아래 설정이 주키퍼 기본 세팅 #zookeeper.pr..