본문 바로가기

Develop/[Kafka]

(27)
[Kafka] 카프카 config 내용 분석 하기 kafka-configs 를 정리해보자 토픽의 일부 옵션을 설정하기 위해서는 kafka-configs.sh명령어를 사용해야한다. --alter와 --add-config 옵션을 사용하여, Min.insync.replicas옵션을 토픽별로 설정할 수있다. 관련 Config 명령어로 broker,all,describe옵션을 사용해서 조회가 가능하다. bin/kafka-configs.sh --bootstrap-server my-kafka:9092 --alter --add-config min.insync.replica=2 topic test bin/kafka-topics.sh --bootstrap-server my-kafka:9092 --topic hello.kafka --describe 예를 들어 위와 같이, ..
[Kafka] 토픽 생성 및 파티션 설정 토픽은 디비의 테이블과 같다. 토픽을 생성하려면, 클러스터 정보와 토픽의 이름을 알고 있으면 된다. topic.sh를 활용해서 해당 토픽을 생성하거나,컨트롤 하면 된다. 파티션 개수, 복제 개수를 설정할 수 있지만, 안하면 브로커의 기본값으로 세팅된다. 우선 주키퍼와 브로커를 실행하자 실행파일은 bin 하위, config 파일은 config 폴더 하위에 있다. 파티션 개수를 줄일수 없는 특성 때문에, 해당 파티션의 개수를 줄여야 할 때는 방법이 없다. 이때는 그냥 새로 토픽을 만드는 것이 좋다. 일단. 주키퍼, 브로커를 실행하자 1) 주키퍼 실행 bin/zookeeper-server-start.sh config/zookeeper.properties 2) 브로커 실행 bin/kafka-server-star..
[Kafka] 카프카 재시작시 발생하는 에러 카프카를 다시 시작하면 종종 에러가 발생하게 된다. 기존에 클러스터에 대한 내용을 캐싱 형태로 가지고 있게 되는데, 이는 재시작을 위해 지워줘야 한다. 왜냐면, 해당 정보는 클러스터가 재시작될때 변경되는데, 이전의 클러스터 정보를 찾아가기 때문이다. (에러 내용) kafka.common.InconsistentClusterIdException: The Cluster ID HJcDo1HpS5-q4aZps1OlAQ doesn't match stored clusterId Some(E40mZS9sS4q0HuW9kidRqg) in meta.properties. The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wro..
[Kafka] Kafka Zookeeper,Broker 세팅 및 실행 1. 카프카 바이너리 파일 다운로드 https://kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org 2.디렉토리 구조확인 kafka 2.8버전을 받았다. 2.12는 스칼라 버전이다. bin은 바이너리나 쉘 스크립트가 포함되어있다. config에는 설정에 필요한 여러 설정파일들이 libs 브로커를 실행할떄 필요한 라이브러리가 있다. 해당 폴더 내에 추가로 data 디렉토리를 생성한다. 이는 데이터를 적재하기 위함이다. 3. 내용 살펴보기 config/server.properties는 브로커를 실행할때 필요한 설정 들이다. # Licensed to the Apache So..
[Kafka] 카프카 운영 방법들 아파치 카프카 클러스터를 서버에 직접 설치하는 것은 가장 전통적이다. 세부적인 서버 설정을 통해, 최고의 성능으로 최적의 클러스터를 활용할 수 있다. 하지만, 시행착오가 필요하다. 따라서 Saas를 도입하는 형태도 많다. 아래 그림을 보면 이해가 편하다. 직접 관리영역이 적을수록, 편하지만 세부적인 설정은 점점 더 불가능해진다. 오픈소스로 직접 구축하면 32/6 기가로 세팅할수있다. 이유는 OS Page cache영역을 사용할 수 있기 떄문에, 오히려 더 빠르고 성능 좋게 처리할 수 있다. 개발용이더라도, 브로커 개수는 여러개로 두는 것이 좋다. 파티션은 한번 늘이면, 다시 줄일수 없지만 브로커는 줄일수 있기 때문이다.
[Kafka] 클라이언트 메타데이터와 브로커 통신 카프카 클라이언트는 메타데이터를 요청하고 응답받는다. 클러스터는 브로커가 여러개일 수있다. 리더 파티션이 몇번 브로커에 있는지 알수있는 메타데이터를 요청하고 전달 받는다. 카프카 프로듀서 메타데이터 옵션 -metadata.max.age.ms : 메타데이터를 강제로 리프래시하는 간격, 기본 5분이다. -metadata.max.idle.ms : 프로듀서가 유휴 상태일 경우, 메타데이터를 캐시에 유지하는 기간이다. 카프카 클라이언트는 반드시 리더파티션과 통신해야한다. 그게 아니라면, Exception이 발생된다. 대부분, 메타데이터 리프래쉬 이슈로발생하고, 해당 리프레쉬 기간에 대한 재설정이 필요하다. 파티션과 리더파티션의 개념을 살짝 추가로 얘기하면 아래와 같다. 브로커는 파티션으로 이루어져있고, 이 파티션..
[Kafka] 카프카 토픽 이름 정하기 토픽 이름에는 제약조건이 있다. -빈문자열은 지원하지 않는다. -마침표나 마침표둘로 생성될수는 없다. -토픽이름은 영어대소문자 0~9 마침표언더파,하이픈 조합으로 생성가능하다. -동일한 이름으로는 생성이 불가능하다 -마침표와 언더바가 동시에 들어가면 안된다.(워닝 발생됨) 의미있는 토픽이름을 작명하는 법 모호하게 작성하면 망한다. 토픽 이름 변경이 안된다. 아래의 방법으로, 생성하는 것을 추천한다고 한다. 되도록이면 이런식으로 최대한 세분화하여, 토픽이름에 데이터를 넣도록 하자. 예시로는 .json을 넣을수가 있는데 이는 컨슈머가 데이터를 받아서 역직렬화를 할떄, 유용하게 사용된다. json이던 뭐든 데이터타입을 포맷에 적게되면 해당 사용시에 유용하다.
[Kafka] 레코드란? 카프카의 레코드의 구조는 아래와 같다. 프로듀서가 생성한 레코드가 브로커로 전송되면 오프셋과 타임스탬프가 지정되어 저장된다. 전송할때는 당연히 지정하여 보내는 것이 아니다. 1. 타임스탬프 타임스탬프는 스트림 프로세싱에서 활용하기 위한 시간을 저장하는 용도로 사용된다. Unix timstamprk 포함되며 프로듀서에서 따로 설정하지 않으면 기본값으로 ProducerRecord 의 생성 시간이 들어간다. 적재시간으로 변경할 수도있다. 2. 레코드 - 오프셋 프로듀서가 생성한 레코드에는 존재하지 않는다. 프로듀서가 전송한 레코드가 브로커에 적재될때 오프셋이 지정된다. (0부터 1씩 증가한다.) 컨슈머는 오프셋을 기반으로 처리가 완료된 데이터와 앞으로 처리해야할 데이터를 구분한다. 각 메시지는 파티션별 고유한..