기본 콘텐츠로 건너뛰기

Kafka 를 zookeeper 없이 사용하기

Apache Kafka, ZooKeeper 의존성을 제거

4P by xguru 2020-05-18
- 주키퍼를 외부의 메타데이터 저장소로 사용하기 때문에 중복, 비효율성, 확장성 제한등의 문제가 발생
- KIP-500 : "Kafka on Kafka"
ㅤ→ Kafka 내부에서 직접 메타데이터를 관리하여 파티션에 저장
ㅤ→ 메타데이터를 로그로 취급
ㅤ→ 토픽 작성/삭제 속도 향상 : 주키퍼랑 다르게 메타데이터 파티션에 새 토픽 작성하는 O(1) 오퍼레이션으로 끝나기 때문
ㅤ→ 단일 클러스터가 백만개 이상의 파티션을 지원 가능
- 로드맵
ㅤ→ 주키퍼와 직접 통신하는 관리도구들이 아직 있음. 이를 대체할 API를 제공 예정
ㅤ→ 메타데이터 파티션과 컨트롤러 간의 의존성이 생기기 때문에 KIP-595 에서 Raft 프로토콜로 Self-managed metadata quorum 구현 예정
ㅤ→ 주키퍼 없이 Kafka를 실행하는 KIP-500 모드 : 처음엔 전체 지원이 불완전 하므로 레거시모드로 주키퍼를 같이 사용할 예정
ㅤ→ KIP-500은 "Bridge Release". 주키퍼 지원이 완전히 사라질 KIP-500이후 버전에서 다운타임 없이 이전할수 있도록 준비하는 중간 업그레이드. 진짜로 주키퍼 없는 버전으로 다시 한번 업그레이드 할수 있도록 지원


Apache Kafka 2.8 - ZooKeeper 제거 업데이트(KIP-500) 및 최신 기능 개요
Apache Kafka 2.8이 출시되었습니다! 이 릴리스에는 오랫동안 기다려온 KIP-500에 캡슐화된 ZooKeeper 제거에 대한 조기 액세스와 Describe Cluster API 추가, SASL_SSL 리스너에 대한 상호 TLS 인증 지원, Kafka Connect의 노출된 작업 구성을 비롯한 기타 주요 업데이트가 포함됩니다. REST API, TopologyTestDriver에 대한 속성 인수 제거, Kafka Streams 특정 잡히지 않은 예외 처리기 도입, Streams에서 창 크기 처리 개선 등.




Mac 1대에 3개의 Kafka를 띄워서 클러스터링 해보기


* 설치 및 테스트 환경 <macos> 
* Kafka Kill
> ps ax | grep kafka
> kill {pid}
> ./bin/kafka-server-start.sh --bootstrap-server localhost:9092

* Kafka Server 실행 <Cluster : 3대> - config 디렉토리 위치가 중요함. kraft 임
> ./config/kraft/server.properties 파일을 server1.properties server2.properties server3.properties 으로 copy 한다.
  해당 파일을 열어서 아래 항목을 수정한다. 
  # The node id associated with this instance's roles
  node.id=1 <이것을 1, 2, 3> 으로 각각 변경한다.

* Kafka Storage 생성 및 포맷 -> process를 3개를 실행할거라 스토리지는 UUID는 1번 생성한거 계속 사용하고 포멧은 3번을 해줘야 함.
  만약 서로 다른 서버라고 하면 storage 생성 -> 포맷을 각각 해줘야함.

$ ./bin/kafka-storage.sh random-uuid
   생성된 UUID<BW1sMe9dQGyDyBsO-gSgug>를 복사한다.

$ ./bin/kafka-storage.sh format -t BW1sMe9dQGyDyBsO-gSgug -c ./config/kraft/server1.properties
   Formatting ../tmp/kraft-combined-logs1
$ ./bin/kafka-storage.sh format -t BW1sMe9dQGyDyBsO-gSgug -c ./config/kraft/server2.properties
   Formatting ../tmp/kraft-combined-logs2
$ ./bin/kafka-storage.sh format -t BW1sMe9dQGyDyBsO-gSgug -c ./config/kraft/server3.properties
   Formatting ../tmp/kraft-combined-logs3

* Kafka Server 1,2,3 실행

> ./bin/kafka-server-start.sh -daemon ./config/kraft/server1.properties
> ./bin/kafka-server-start.sh -daemon ./config/kraft/server2.properties
> ./bin/kafka-server-start.sh -daemon ./config/kraft/server3.properties

* Topic 생성
> ./bin/kafka-topics.sh --create --topic foo --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
> ./bin/kafka-topics.sh --create --topic foo --partitions 3 --replication-factor 1 --bootstrap-server localhost:9092,localhost:9094,localhost:9096

* Topic 조회
> ./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
> ./bin/kafka-topics.sh --list --bootstrap-server localhost:9092,localhost:9094,localhost:9096
> 
* Topic 읽기<Consumer>
> ./bin/kafka-console-consumer.sh --topic foo --bootstrap-server localhost:9092
> ./bin/kafka-console-consumer.sh --topic foo --bootstrap-server localhost:9092,localhost:9094,localhost:9096

* Topic 쓰기<Producer>
> ./bin/kafka-console-producer.sh  --topic foo --bootstrap-server localhost:9092
> ./bin/kafka-console-producer.sh  --topic foo --bootstrap-server localhost:9092,localhost:9094,localhost:9096

  • listener 및 quorum 포트 계획 <짝수, 홀수>













  • server{1,2,3}.properties 예시



















댓글

이 블로그의 인기 게시물

[quaser.dev][2014-09-14] 윈도우즈(10, 64bit)에 개발환경 설정하기

[quaser.dev][2014-09-14] 윈도우즈(10, 64bit)에 개발환경 설정하기

[2024-10-19] iPhone, iPad에서 ChatGPT로 PDF 생성시 한글 깨짐 해결 방법

iPhone, iPad에서 ChatGPT로 PDF 생성 시 한글 깨짐 해결 방법

[2025-04-16(수)] OpenAI gpt-4.1 시리즈 발표, Anthropic Claude에 대한 생각

OpenAI gpt-4.1 시리즈 발표, Anthropic Claude에 대한 생각 안녕하세요. 클스 입니다. 4/15일자로 openai가 gpt-4.1 시리즈를 발표 했습니다. 현재는 api로만 사용가능합니다. 점차 웹/앱 사용자에게 오픈 될거라 생각 됩니다. 비용상 문제로 4.1-mini, nano를 사용해서 chatbot을 만들어 보고 있습니다. 4o 시리즈 보다는 확실히 빠르고, 답변의 정확도는 올라간 것 같습니다. 앤트로픽 클로드와 비교를 많이 하는데, 업무 시스템 혹은 AI 솔루션을 개발하는 입장에서는 어떤 생태계를 제공하는가가 주요한 결정 입니다. AI관련 인력을 충분히 보유한 회사의 경우는 어떤걸 사용해도 좋을 결과를 가지겠지만 일반적인 챗봇 개발 절차를 보면 다음과 같이 볼 수 있습니다. 1. 문서를 준비한다. 대부분 pdf, text, markdown 2. 문서를 파싱해서 vectordb에 올린다.     - 별도 벡터디비 구성 필요. 어떤 db를 선택할지 고민 필요     - 어떤 Parser를 사용할지, 텍스트 오버래핑은 얼마가 적당한지 고민 필요        (회사의 문서가 워낙 많고, 다양하면 하나하나 테스트 해서 좋은걸 선택하는 것이 어렵다)     - 유사도 측정은 어떤 알고리즘을 써야할지 고민 필요     - llamaindex도 고민해야 함. 3. RAG flow를 만든다.     - langchain을 쓸지, 각 AI 벤더에서 제공하는 sdk를 쓸지 고민 필요       (대부분 락인이 되지 않으려면 langchain을 사용하면 좋지만, 벤더에 특화면 기능 적용이 늦음) 4. 챗봇 UI 앱을 만든다.     - 답변이 text 로 구성되다 보니. 그래프, 이미지등 복합적인 컨텐츠를 재배치 하여 표현하기 상당히 어렵네요. (이건 제가 실력이 모자라서 .. 패스) ...