KAFKA21 되고만다-카프카깡패 (1) CDC란? 올해 들고 굉장히 마음이 헤이해졌음을 느낀다. 카프카가 분명 정말 하고 싶었었는데 행복한 돼지가 되고픈 마음과 겹쳐 공부를 자꾸만 놓고 있었다. 이럴 순 없어! 프로덕션 환경에서 운영자 관점에서 Kafka를 이해해보고, 신규 Kafka 구축도 올해 꼭! 진행해보기 위해 25년 올해 4월까지는 현재 회사 운영 환경에서의 구조에서 잘 모르고 어려운 부분들을 잘 골라내서 self 공부해보려 한다.Change Data Capture(CDC)란 무엇인가데이터가 저장된 상태에서 발생하는 변경 사항을 실시간 또는 근실시간으로 포착해 다른 시스템에 전달하는 기법을 Change Data Capture(이하 CDC)라고 한다.CDC를 활용하면 기존 시스템에 큰 수정 없이 DB 로그 또는 트랜잭션 기록을 근간으로 데이터를 .. DevOps/Kafka 2025. 3. 26. Java-Gradle Kafka 환경 설정하기 sdk 리스트: https://learn.conduktor.io/kafka/kafka-sdk-list/IntelliJ Idea에서 New Project 통해 Java > Gradle 선택 및 jdk 잡아주기프로젝트 하위에 새로운 module을 다음과 같이 만들어준다.maven repository로 간다: https://mvnrepository.com/artifact/org.apache.kafka가장 먼저 kafka-clients가 눈에 띌 것가장 최신 버전을 클릭해주기.거기서 Gradle을 클릭하여 복사해준 후, 그대로 dependencies 하위에 붙여넣어준다.// https://mvnrepository.com/artifact/org.apache.kafka/kafka-clientsimplementati.. DevOps/Kafka 2025. 1. 22. Mac OS에서 쓸 수 있는 kafka docker-compose 구성 (arm 64) Docker Compose를 이용한 Kafka 클러스터 구성Kafka는 분산 메시징 시스템으로, 데이터 스트리밍 처리에 널리 사용된다. 이 글에서는 Docker Compose를 활용하여 Zookeeper와 Kafka 브로커 3개로 구성된 로컬 환경을 구축하는 방법을 다룬다. 또한, Kafka UI 및 관리 도구를 포함하여 운영 환경을 시뮬레이션할 수 있는 구성 방법도 설명한다.1. Kafka 클러스터 개요Kafka 클러스터는 일반적으로 다음과 같은 구성 요소를 포함한다.Zookeeper: Kafka 브로커들의 메타데이터를 관리하며 클러스터의 상태를 조율한다.Kafka 브로커: 메시지를 저장하고 클라이언트로부터의 요청을 처리하는 핵심 요소이다. 브로커는 여러 개로 구성될 수 있으며, 데이터의 분산 및 복제.. DevOps/Kafka 2024. 11. 21. [카프카] 트랜잭션 프로듀서와 트랜잭션 컨슈머 도입오늘도 돌아온 지우.지우는 욕심쟁이라 피카츄 백만볼트, 잠만보 휴식, 피카츄 상처 치료, 피카츄 몸통박치기를 한큐에 끝내고 싶은데, 만약 한턴에 4동작을 하는 게 실패한다면, 위험해 질 수 있어, 그냥 모두 없었던 일로 하고 싶다. 트랜잭션 프로듀서카프카에서 트랜잭션은 다수의 파티션에 데이터를 저장할 경우 모든 데이터에 대한 동일한 원자성(atomic)을 만족시키기 위해 사용된다. 원자성을 만족시킨다는 의미는 다수의 데이터를 동일 트랜잭션으로 묶음으로써 전체 데이터를 처리하거나 전체 데이터를 처리하지 않도록 하는 것을 의미한다.트랜잭션 프로듀서는 데이터를 파티션에 저장할 뿐 아니라, 트랜잭션의 시작과 끝을 표현하기 위해 트랜잭션 레코드(커밋)를 한 개 더 보낸다. 이를테면 이렇게, 명령이 다 끝났다.. DevOps/Kafka 2024. 9. 17. [카프카] 멱등성(idempotence) 프로듀서란? 도입지우(프로듀서)가 하는 말을 포켓몬(컨슈머)이 알아들을 수 없어서,배틀필드에서 차례대로 시리(브로커)가 포켓몬어로 번역해준다고 하자.호기롭게 외쳤고, 시리도 들었지만 시리가 통신 오류로 "네 알겠습니다 주인님"을 못했다.지우가 중꺾마 정신으로 다시 "포켓몬의 백만볼트"를 외치니, 시리는 이제 "포켓몬의 백만볼트"를 두번 삐까츄에게 전달해주고,삐까츄는 그렇게 탈진해버렸다는 슬픈 이야기...그렇다면, 어떻게 해야 삐까츄에게 같은 명령이 여러 번 전달되지 않게 할 수 있을까?프로듀서의 전달방식프로듀서가 브로커에게 명령을 전달하는 방식에는 아래의 세 가지가 있다.at least once: 적어도 한번 이상 전달 (기본 프로듀서의 동작 방식이며, 데이터가 유실되지 않지만, 이 경우 위 사례처럼 두 번이상 적재.. DevOps/Kafka 2024. 9. 17. [CCDAK] Confluent Developer for Apache Kafka 2024 대비하기 시험 주제Kafka ArchitectureKafka ConfigurationsKafka CLI CommandsKafka APIsKafka OperationsKafka SecurityKafka ConnectKafka StreamsConfluent KSQLConfluent Schema RegistryConfluent REST Proxy 비율Application Design – 40% of the examKafka’s command-line toolsPub/Sub and streaming conceptsKafka architecture and design decisionsKafka APIs, configuration and metricsMessage structure, key selection (choices.. DevOps/Kafka 2024. 9. 17. [카프카 프로그래밍] 그 외 커맨드 라인 툴, 카프카 토픽을 만드는 두가지 방법, 카프카 브로커와 로컬 커맨드 라인 툴 버전을 맞춰야 하는 이유 그 외 커맨드 라인 툴kafka-producer-perf-test.sh: Kafka 생산자의 퍼포먼스를 측정하는 스크립트 (유사 스크립트: kafka-consumer-perf-test.sh)kafka-reassign-partitions.sh: 리더 파티션과 팔로워 파티션의 위치를 재배치하여 리더 위치를 적절하게 배분하는 스크립트kafka-delete-records.sh: 특정 토픽에서 레코드를 삭제하는 스크립트kafka-dump-log.sh: Kafka 로그 세그먼트를 덤프하여 로그의 내용을 확인하는 스크립트카프카 토픽을 만드는 두가지 방법컨슈머 또는 프로듀서가 브로커에 데이터를 요청할때커맨드 라인 툴로 명시적으로 토픽을 생성할 때대부분은 커맨드 라인으로 명시적으로 만드는 게 유지보수하기 좋음.카프카 브.. DevOps/Kafka 2024. 7. 2. [카프카 프로그래밍] kafka-topics.sh 토픽생성bin/kafka-topics.sh --create --bootstrap-server my_kafka:9092 --topic hello.kafka상세 (파티션이나 rf등이 보고싶다!)bin/kafka-topics.sh --bootstrap-server my_kafka:9092 --topic hello.kafka --describe내가 상세한 설정을 다르게 만들고 싶어 (파티션은 10으로, rf는 1로, retention도 바꿔서)bin/kafka-topics.sh --create --bootstrap-server my_kafka:9092 --partitions 10 --replication-factor 1 --topic hello.kafka2 --config retention.ms=17280000.. DevOps/Kafka 2024. 6. 30. [카프카 프로그래밍] 로컬 카프카 설치 순서JVM 설치주의할 점은 브로커, 주키퍼는 모두 JVM에서 돌아간다는 점이다. JVM이 설치되어 있지 않다면 JVM부터 설치!해준다. (윈도우 JVM 설치: https://velog.io/@mirrorkyh/JVMJava-Virtual-Machin-%EC%A2%85%EB%A5%98%EC%99%80-%EC%84%A4%EC%B9%98)brew updatebrew tap adoptopenjdk/openjdkbrew search jdk원하는 버전 설치brew install --cask adoptopenjdk11현재 쓰고 있는 쉘(zsh)에서 환경변수 잡아주기자바 설치된 곳 확인/usr/libexec/java_home -Vvim ~/.zshrc# Java Pathsexport JAVA_HOME_11=$(/usr.. DevOps/Kafka 2024. 6. 30. [카프카 퀴즈] 카프카 운영 퀴즈 컨플루언트 플랫폼은 클라우드에서 제공하는 SaaS형 카프카이다 (O/X)X 온프렘에 직접설치하는. 컨플루언트 클라우드에 대한 설명.SaaS를 사용하면 비용이 반드시 절감된다 (O/X)X 보통 더 많이 나옴.SaaS형 카프카를 사용하더라도 주키퍼는 사용자가 운영해야 한다 (O/X)X AWS MSK는 컨플루언트의 대표적인 클라우드 서비스이다 (O/X)X SaaS형 카프카를 사용하면 카프카에 대한 깊은 지식이 없어도 무관하다 (O/X)X 사용하더라도 카프카를 사용하는 건 똑같다. DevOps/Kafka 2024. 6. 29. [카프카 프로그래밍] 카프카 클러스터를 운영하는 여러가지 방법 온프레미스 : 전산실. 오픈소스 카프카나 기업용 카프카설치, 운영할 수 있어야.IaaS : aws 등 마찬가지로 오픈소스/기업용 카프카 설치, 운영할 수 있어야.기업용 카프카 예시? 컨플루언트 플랫폼 등 - 튜닝 되어있음. 무료는 아니지만 커넥트를 활용하여 DB 연결이 제공되고 모니터링 툴이 제공되는 등 기능 제공SaaS : 소프트웨어 전체 제공. 컨플루언트 클라우드 또는 MSK가 대표적.노하우가 부족하면 SaaS 도입 후 IaaS나 온프레미스로 마이그레이션 하는 것도 괜찮은 방법💡직접 설치/운영 tip메모리 : 32GB 머신 힙메모리 6GB로 브로커 돌리고, 나머지는 OS 페이지 캐시영역으로 활용CPU : 24 core머신디스크: raid 10, NAS 사용하면 안됨네트워크: 데이터 통신량 따라 다름.. DevOps/Kafka 2024. 6. 29. [카프카 퀴즈] 카프카 기본 구조 퀴즈 컨슈머가 가져간 데이터는 파티션에서 삭제된다 (O/X)X카프카에서 데이터 복제의 단위는 토픽이다 (O/X)X. 파티션임.파티션은 1개의 리더 파티션과 1개 이상의 팔로워 파티션으로 이루어져 있다 (O/X)X 리더만일수도? (rf=1)프로듀서와 컨슈머는 팔로워 파티션과 통신하여 데이터 처리량을 늘릴 수 있다 (O/X)X (반드시 프로듀서와 컨슈머는 리더 파티션과만 통신!)레코드는 타임스탬프, 메시지 키, 메시지 값, 오프셋으로 이루어져 있다 (O/X)X (+ 헤더. 데이터 처리할 때 필요한 스키마)다음 파티션에서 압축(compact)이 실행된다면, 남은 모든 오프셋의 배열은? (주관식, 숫자 나열)10 14 15 16 17 18 19이 포스팅은 모두 인프런의 [아파치 카프카 애플리케이션 프로그래밍] 개념부.. DevOps/Kafka 2024. 6. 27. [카프카 프로그래밍] 클라이언트 메타데이터 카프카 클라이언트는 통신하고자 하는 리더 파티션의 위치를 알기 위해 데이터를 주고(프로듀서) 받기(컨슈머) 전에 메타데이터를 브로커로부터 전달받는다.카프카 클라이언트는 반드시 리더 파티션과 통신해야 하는데, 따라서 만약 현재 메타데이터가 리프레쉬 되지않은 상태라면 잘못된 브로커로 요청이 가서(팔로워 파티션이 있는 브로커 #1, #2) LEADER_NOT_AVAILABLE 익셉션이 발생할 수 있다. 그래서 역으로, 이 익셉션이 자주 발생한다면 메타데이터 리프레시 간격이 적정한지 확인해본다.이 포스팅은 모두 인프런의 [아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!를 듣고 제가 다시 볼 내용들을 정리한 포스팅입니다. DevOps/Kafka 2024. 6. 27. [카프카 프로그래밍] 유지보수하기 좋은 토픽 이름 정하기 기본 제약 조건빈 문자열 토픽 이름은 지원하지 않는다.영어 대 소문자, 0~9, 마침표, 언더바, 하이픈 조합 생성 가능단, 마침표와 언더바가 동시에 들어가면 WARNING 발생의미 있는 이름작명 해야하는 이유카프카 토픽은 이름 변경을 지원하지 않아 삭제 후 다시 생성하는 것 외에는 방법이 없어 잘 지어야함템플릿...... DevOps/Kafka 2024. 6. 27. [카프카 프로그래밍] 레코드 레코드는 수정/삭제될수 없고 로그 리텐션에 의해 세그먼트 단위로만 삭제됨.timestamp : Producer의 생성시간이 기본시간offset : 프로듀서가 생성한 레코드에는 존재하지 않음. 전송한 레코드가 브로커에 적재될 때 (커밋이후) 오프셋 지정되는 것. 0부터 시작되고 1씩 증가.header : key/value. 정보를 담을 수 있음.메시지 키 : 분류를 위해 사용. 필수 값은 아니라서 지정 하지 않으면 null.메시지 값 : 실질적으로 처리해야 할 데이터가 담김.이 포스팅은 모두 인프런의 [아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!를 듣고 제가 다시 볼 내용들을 정리한 포스팅입니다. DevOps/Kafka 2024. 6. 27. 이전 1 2 다음