DevOps/Kafka32 [카프카 프로그래밍] kafka-console-producer.sh, kafka-console-consumer.sh kafka-console-producer.sh 용도토픽에 데이터 넣기용key.separator선언해야 레코드키 전송메시지 키가 동일한 경우에는 동일한 파티션null인 경우는 라운드로빈bin/kafka-console-producer.sh --bootstrap-server my_kafka:9092 --topic hello.kafka명령어 치면 꺽쇠나옴따로 이렇게 parse key 안주면 메시지 값은 hello 로 설정되지만 메시지 키는 null이고 라운드로빈으로 설정되는것임.bin/kafka-console-producer.sh --bootstrap-server my_kafka:9092 --topic hello.kafka --property "parse.key=true" --property "key.separ.. DevOps/Kafka 2024. 7. 1. [카프카 프로그래밍] kafka-configs.sh kafka-configs.sh는?토픽의 일부옵션을 설정하기 위한 명령어 min.insync.replicas 옵션을 토픽별로 설정 가능.원래 describe 했을 때 configs min.insync.replics 설정 아무것도 없던 hello.kafka2 topicbin/kafka-configs.sh --bootstrap-server my_kafka:9092 --alter --add-config min.insync.replicas=2 --topic hello.kafka2[참고] min.insync.replicasmin.insync.replicas는 ack응답을 보내기 위한 리더가 확인해야할 최소 리플리케이션의 수를 지정하는 브로커 관련 옵션이다.아무리 메세지 무손실을 위해 acks=all의 옵션을 프로듀.. DevOps/Kafka 2024. 6. 30. [카프카 프로그래밍] 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. [카프카 프로그래밍] 로컬 카프카 실행 저번에 설치까지 마쳐서(https://naa0.tistory.com/410) Documents쪽에 kafka_2.12-2.5.0라는 이름의 폴더로 kafka가 설치되어 있다.포인트는 주키퍼를 먼저 실행시키고 브로커를 실행시켜야한다는 점이다.해당 폴더에서 config/server.properties를 고쳐준다.여기에는 broker.id=0이라는 값이 있는데 이를 통해 우리가 띄울 broker id가 0이라는 걸 알 수 있다.우선 listeners와 advertised.listeners 주석 해제후 localhost로 바꾸기그리고 data 디렉토리를 새로 생성해준다.로그세그먼트 여기에 저장할 예정인데, 그럼 다시 server.properties의 log.dirs를 해당 경로로 바꿔준다.주키퍼 실행bin/zo.. 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:1.데이터 처리 늘리려면 컨슈머 개수 늘림과 동시에 파티션 개수 늘리면 됨.그러나, 파티션 개수 줄이는 것은 불가능! 따라서 파티션 개수 늘리는 것은 신중하게! 이 포스팅은 모두 인프런의 [아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!를 듣고 제가 다시 볼 내용들을 정리한 포스팅입니다. DevOps/Kafka 2024. 6. 27. [카프카 프로그래밍] 토픽과 파티션 토픽토픽은 카프카에서 데이터 구분 위해 사용.토픽은 1개 이상 파티션 소유파티션파티션에서 프로듀서가 보낸 데이터들이 저장되는데 이 데이터들을 레코드라 함.파티션은 결론적으로 큐와 비슷하지만 차이가 있다면 큐는 데이터를 가져가면 삭제하지만 카프카에서는 삭제하지 않는다는 것.그래서 여러 컨슈머 (이를 테면 하둡과 엘라스틱 서치가 있다 치자.) 들이 모두 데이터를 가져갈 수 있음.토픽과 파티션이 배치 되는 방법파티션이 5개인 토픽을 생성했을 때 보통 0번부터 라운드 로빈 방식으로 리더 파티션들이 생성.카프카 클라이언트는 리더 파티션이 있는 브로커와 통신하여 데이터를 주고 받아 특정브로커에 통신이 집중되는 핫스팟 현상을 막고 선형 확장 하여 데이터가 많아져도 자연스럽게 대응.위 같이 특정 브로커에 파티션이 쏠릴.. DevOps/Kafka 2024. 6. 27. [카프카 프로그래밍] 브로커의 역할 1️⃣ 컨트롤러다수 브로커 중 한대가 컨트롤러의 역할을 해서 헬스체크하고 비정상이면 빠르게 클러스터에서 빼내기.2️⃣ 컨슈머 오프셋 저장어느 레코드까지 가져갔는지 확인하려고 오프셋 커밋. _consumer_offsets 토픽에 저장이건 언제보냐? 장애 났을 때 어디까지 토픽 저장됐는 지 확인할 때 본다.3️⃣ 그룹 코디네이터파티션을 컨슈머와 매칭되도록 분배.컨슈머가 보통 1:1 처리 중인데 만약 컨슈머가 장애나서 빠지면 파티션을 정상 컨슈머로 할당해서 한 컨슈머가 여러 파티션 처리하게 우선 리밸런스함.4️⃣ 데이터의 저장카프카를 실행할 때 config/server.properties의 log.dir 옵션에 정의한 디렉토리에 데이터를 저장하는데 토픽 이름과 파티션 번호의 조합으로 하위 디렉토리를 생성하여 .. DevOps/Kafka 2024. 6. 23. [카프카 프로그래밍] 카프카 생태계와 브로커, 주키퍼 카프카 생태계카프카 프로듀서가 기본적으로 데이터를 넣고, 컨슈머가 데이터를 가져간다.stateful/stateless하게 다시 토픽을 처리해서 넣고 싶을 때는 스트림즈.데이터베이스에서 가져와서 토픽에 데이터를 넣는 역할은 커넥트(소스) 다시 가져가는 애가 커넥트(싱크).그럼 그냥 프로듀서, 컨슈머랑 같은거 아니야? 🙅 프로듀서 컨슈머와의 차이는 템플릿으로 반복적으로 만들 수 있다는 거다. (rest api)프로듀서, 커넥트, 컨슈머, 스트림즈는 모두 java library로 제공되며, go나 js는 써드 파티라 모든 기능이 제공된다고 볼 수 없다는 점 유의.브로커는 뭐해?브로커0, 1, 2에 모두 데이터를 저장해서 브로커0이 죽더라도 컨슈머가 브로커1, 브로커2에서 가져갈 수 있게 분산 저장해.주키퍼는.. DevOps/Kafka 2024. 6. 22. 이전 1 2 3 다음