Kafka 50

KRaft

목차 [KRaft?] Actually, the problem is not with ZooKeeper itself but with the concept of external metadata management. (사실 문제는 ZooKeeper 자체가 아니라 외부 메타데이터 관리 개념에 있습니다.) 카프카 클러스터를 구성하기 위해서는 메타데이터 관리를 하는 코디네이터 서비스가 필요하고, 거의 대부분이 주키퍼를 통해서 코디네이터 서비스를 구축하고 있다. 다만 주키퍼를 통한 카프카 외부에서 메타데이터 관리 하다보니 데이터 중복 또는 브로커의 메타데이터와 주키퍼의 메타데이터의 불일치, 시스템 복잡성 증가, 서버나 시스템이 추가로 더 필요하거나 더 많은 자바 프로세스 실행 필요와 같은, 더 많은 자원의 소모 등의 ..

Kafka 2023.11.28

Kafka Cruise-Control 사용해보기

목차 [Cruise Control?] Cruise Control은 Apache Kafka 클러스터를 대규모로 실행하는 데 도움이 되는 제품입니다. Apache Kafka의 인기로 인해 많은 회사에서 점점 더 큰 Kafka 클러스터를 보유하고 있습니다. LinkedIn에는 ~7K+ Kafka 브로커가 있습니다. 이는 브로커 사망이 거의 매일 발생하고 Kafka의 작업 부하 균형도 큰 오버헤드가 된다는 것을 의미합니다. Kafka Cruise Control은 이러한 작업 확장성 문제를 해결하도록 설계되었습니다. Kafka 클러스터를 원격으로 관리하는데 도움이 되는 REST 인터페이스를 추가했습니다. Cruise Control은 큰 규모의 Kafka 클러스터를 운영하는데 있어 운영관리를 단순하게 해주는 오픈소..

Kafka 2023.08.31

MirrorMaker2 Basic

목차 [참조] mirrorMaker2 내용: https://devidea.tistory.com/112 mirrorMaker2 내용 + 구동방법: https://blog.voidmainvoid.net/293 mirrorMaker2 구동방식 분석: https://devidea.tistory.com/107 MirrorMaker1의 한계점과 2 release: https://devidea.tistory.com/70 MirrorMaker2의 성능테스트: https://devocean.sk.com/blog/techBoardDetail.do?ID=164371 MirrorMaker2 전체적인 정리 Part1: https://www.instaclustr.com/blog/kafka-mirrormaker-2-theory/ ..

Kafka 2023.07.24

MirrorMaker2 - 테스트

목차 MirrorMaker2 설정 정리 참조: https://godekdls.github.io/Apache%20Kafka/geo-replication/ (MirrorMaker2 부분) [MirrorSourceConnector] 기본 조건 active-passive 상황으로 가정한다. source: source-dev (active) target: target-dev (passive) 토픽명: jaeshim-mirror-20230724 (파티션5) Configurations 설정값 설명 Default refresh.topics.enabled 주기적으로 새 토픽을 확인할 지 여부 true refresh.topics.interval.seconds 새 토픽 확인 주기 6000 (10분) source.cluste..

Kafka 2023.07.24

클러스터간 메시지 복제

목차 카프카 클러스터간 복제를 하는 방법은 다양한 듯 한데, 어떤 방법과 도구를 사용하는 것이 좋을지 나름대로 정리해본다. [메시지 복제 도구 후보] 도구 내용 비고 Confluent Connect Replicator Control-Center에서 별도의 메뉴로 제공. 상용 Apache Kafka MirrorMaker1 Producer/Consumer API를 호출하는 형태로 동작. MirrorMaker1의 단점들이 MirrorMaker2로 보완되어 출시 오픈소스 Apache Kafka MirrorMaker2 Connector 형태로 동작. Apache kafka 2.4부터 릴리즈. 오픈소스. 오픈소스 Logstash 단순 메시지 복제. 키, 헤더 기타 정보 복제 X 오픈소스 Fluentd Logstas..

Kafka 2023.07.24

높은 버전의 kafka 라이브러리에서 압축된 메시지를 낮은 버전의 라이브러리에서 consuming할 수 없는 이슈

목차 [개요] 토픽을 구독하려고 했는데 아래같은 오류가 발생한다. 해당 오류가 반복적으로 발생하면서 메시지 처리가 되지 않는다. 해당 토픽은 Spring Kafka 2.6 버전을 사용하는 producer에서 발급되었고, compression.type = zstd을 사용하고 있다. Consumer는 아래 환경에서 동작한다. SpinrgBoot Version: 2.1.6 Spring Kafka Version: 2.2.7 Apache Kafka Client Version: 2.0.1 [문제 현황] consumer-group에는 정상적으로 추가되지만 오류가 발생하면서 메시지를 계속해서 처리하지 못한다. 라이브러리 버전을 올릴 경우 정상적으로 동작한다. [디버깅] Fetcher.java의 fetchRecords ..

Kafka/Spring Kafka 2023.06.20

Tranforms - kryptonite-for-kafka를 사용하여 Field-Level 암복호화 해보기

목차 소개: https://developers.redhat.com/articles/2022/09/27/end-end-field-level-encryption-apache-kafka-connect github: https://github.com/hpgrahsl/kryptonite-for-kafka GitHub - hpgrahsl/kryptonite-for-kafka: Kryptonite for Kafka is a client-side 🔒 field level 🔓 cryptography library for Apa Kryptonite for Kafka is a client-side 🔒 field level 🔓 cryptography library for Apache Kafka® offering a Kafka..

Kafka/Connect 2023.06.09

Spring Kafka - Producer

목차 [개요] 스프링 카프카 프로듀서는 KafkaTemplate 이라는 클래스를 사용한다. KafkaTemplate은 ProducerFactory 클래스를 통해 생성된다. KafkaTemplate을 생성하는 방법은 "기본 템플릿" or "사용자 정의 템플릿"을 ProducerFactory로 생성하는 방법이다. [Basic KafkaTemplate] 기본 카프카 템플릿은 application.yaml에 프로듀서 옵션을 넣기만 하면 옵션이 적용된다. spring: kafka: producer: bootstrap-servers: localhost:9092 acks: all enable.idempotence: true retries: 3 .... 예제 기본 템플릿을 통해 "jaeshim-test"라는 토픽에 메..

Kafka/Spring Kafka 2023.05.29

Topic Naming Convention

목차 [INTRO] 카프카에서의 화두 중 하나는 카프카 토픽의 이름을 어떻게 짓는것이냐이다. 보통 많은 회사들이 기존의 토픽명의 관습에 따라 많이 짓는다고 한다. 아래와 같은 네이밍 규칙이 권장된다. .. -- ... 그리고 chris riccomini는 아래와 같은 네이밍 규칙을 사용하기도 했다고 한다. .. [카프카에서 유효한 토픽명] 카프카에서는 '_', '-', '.' 이며 아래 정규식이 카프카에서 사용할 수 있는 토픽명이다. 하지만 '_','-' 등을 혼용해서 사용할 경우 충돌이 날 수 있기 때문에 혼용하지 않도록 해야한다. legalChars = "[a-zA-Z0-9\\._\\-]" 또한 토픽명은 대소문자를 구분한다. [카프카에서 토픽명을 정할 때 몇가지 지침들] 토픽명의 포맷을 정해라 가장 ..

Kafka/Broker 2023.05.29

Kafka TCP Connection에 대한 정리

목차 [INTRO] 기본적으로 Kafka에서는 active_connection_count라는 메트릭지표로 현재 사용 중인 Connection 수에 대한 지표를 제공한다. 하지만 실제 클라이언트 인스턴스 수 보다 이 값이 높은 경우가 있다고 한다. TCP Connection 수에 대한 정리. librdkafka에 Connection에 대한 내용이 정리되어 있다. librdkafka/INTRODUCTION.md at master · confluentinc/librdkafka · GitHub GitHub - confluentinc/librdkafka: The Apache Kafka C/C++ library The Apache Kafka C/C++ library. Contribute to confluentinc..

Kafka/Broker 2023.05.29

Consumer Error Handling Patterns

목차 Kafka의 에러 핸들링은 보통 Consumer단에서 처리한다고 한다. 이러한 에러를 핸들링하는 패턴들에 대해 정리. [Poison Pill] Poison Pill이란 Consumer가 처리하지 못하는 메시지가 왔을 때를 의미힌다. (Deserializer를 하지 못하는 메시지 형태) M2가 비정상적 메시지라고 하면 M2를 처리하다가 오류가 나고 Consumer가 실패할 것이다. Spring - ErrorHandlingDeserializer 스프링에서는 ErrorHandling Deserializer를 제공하고 있다고 한다. 그래서 이상한 데이터가 들어오면 ErrorHandling Logic의해 처리되고, 정상적인 데이터들만 Consumer로 넘어가게 하는 패턴을 권장한다고 한다. [Error Ha..

Kafka/Consumer 2023.05.09

Kafka Consumer 성능과 고려 요소들

목차 [Consumer 관련 용어들] Log end Offset: 파티션에 추가된 최신 데이터. producer가 현재 쓰고 있는 위치. 아직은 consumer가 액세스 할 수 없음 High Watermark: 데이터가 모든 Replica에 복제됨. 사용가능한 오프셋 위치 Current Position: consumer instance 개별적으로 관리하는 것. 현재 처리 중인 오프셋 위치 Last Committed Offset: __consumer_offsets 토픽에 저장된 마지막 위치. [Conusmer 주요 파라미터들] fetch.min.bytes: 최소 fetch 용량. 1이면 즉시 불러온다. fetch.wait.max.ms: fetch 최대 대기시간. max.partition.fetch.byte..

Kafka/Consumer 2023.04.23

Kafka Cluster의 성능과 고려요소들

목차 [개요] Produce & Consume의 Request가 어떻게 처리되는지 알아야 한다. 비효율적인 Request가 Broker 성능에 어떤 영향을 줄지 가늠해보아야 한다. Broker의 내부 동작을 알고 있어야 한다. Controller 선출 방법 Broker 장애감지 방법 Controller 장애 후 복구 과정에서 파티션 수가 중요한 이유를 알아야 한다 [Kafka Cluster에 영향을 주는 요소들] Client 설정들 주어진 처리량에 대해 최적화 되지 않은 클라이언트는 필요이상의 request를 생성한다. Kafka는 기본적으로 커넥션을 계속 사용하는 것을 고려해 놓았기 때문에 하나의 요청에 많은 데이터가 오는 방식이 더 적합하다. batch.size, linger.ms의 값을 적절히 설정..

Kafka/Broker 2023.04.23

Kafka Producer 성능 테스트, 튜닝

목차 [개요] 카프카에서는 프로듀서 튜닝이 가장 핵심적인 요소이다. Throughput, latency는 프로듀서가 얼마나 효율적인 작업을 하는가에 따라 달라진다. Biz 요구사항을 가장 먼저 파악하고 그에 맞는 성능튜닝을 진행한다. Durability, Availability, Throughput, Latency 의 우선순위를 정해본다. 작은 변화를 위해 설정값을 변경하는 건 권고하지 않는다. 큰 변화일 때만 설정값을 변경한다. : https://www.confluent.co.uk/blog/configure-kafka-to-minimize-latency/ Tail Latency at Scale with Apache Kafka | UK Apache Kafka allows you to achieve bot..

Kafka/Producer 2023.04.22

Kafka Connect 클러스터 구성 방법과 리밸런싱

목차 [Connect 구성 방법] Standalone : 하나의 워커(프로세스) 로 구성되어 있어 하나의 프로세스로 모든 작업을 처리하는 커넥트 프레임워크 프로세스 하나 안에 connector + task 로만 이루어져 있음 task개수는 읽고자 하는 토픽 개수 혹은 하나의 태스크가 여러개의 작업을 처리함 하나의 프로듀서와 하나의 컨슈머 그룹 과 동일한 구조 모든 작업이 하나의 JVM에서 처리됨 개발단계 등에서만 사용한다 Distributed : 복수의 워커로 구성되어 있는 커넥트 클러스터 connect instance가 생성되며 얘를 통해 task들을 워커에 골고루 분포시킴 설정한 task 개수에 맞춰 워커에 균등하게 분산시켜줌 group id로 묶어 하나의 커넥트 클러스터로 구성 가능하다 운영환경에서..

Kafka/Connect 2023.04.22

Kafka Connect 플러그인 설치 방법

목차 [Kafka Connector 확인하기] Confluent Hub: https://www.confluent.io/hub/ Confluent Hub에는 사용가능한 Connector들을 확인할 수 있다. 사용하려는 connector를 검색한다. 라이센스 확인 Connector 별로 라이센스가 달라서 확인이 필요하다. Apache License, Confluent Community License: 무료이므로 사용상의 제약이 없다. Confluent Support: 유료 라이센스이므로 사용 전 확인이 필요하다. [설치하기] 플러그인을 설치하는 방법은 2가지가 있다. Confluent CLI를 통한 설치 zip파일을 내려받아 connector plugin Path에 직접 옮겨주기 Confluent CLI를 ..

Kafka/Connect 2023.04.22