본문 바로가기

Open Source/Kafka

rdkafka 빌드

[1. 개요]

  • the Apache Kafka C/C++ client library
  • librdkafka 는 C/C++ 환경에서 kafka 클라이언트 구현을 위한 라이브러리
  • 로컬 환경에서 라이브러리 빌드 방법을 정리한다.

[2. 개발환경]

  • OS : Windows
  • Compiler : mingw64

리눅스도 비슷한 방식으로 진행한다.


[3. 라이브러리 빌드]

정상적으로 빌드 성공 시 산출물은 아래 경로에 존재한다.

  • src
    • librdkafka
  • src-cpp
    • librdkafka++

C++ 코드 작성 시 필요한 헤더 파일은 아래 경로에서 가져오도록 한다.

  • librdkafka-2.1.1\src-cpp\rdkafkacpp.h

[3.1. 빌드에 관한 고찰]

CMakeLists.txt 를 살펴보면 아래와 같은 라이브러리가 필요하다.

  • pkgconfig
  • zlib
  • curl
  • zstd
  • openssl
  • lz4

zlib, lz4 는 메시지 압축 (produce 시), 추출 (consume 시) 필요하고,

openssl 은 카프카 서버와 암호화 통신 시 필요하다.

 

다만, 위와 같은 기능이 따로 필요하지 않는 경우,

의존 패키지 없이도 빌드가 가능하다.

 

각 패키지 존재 여부에 따라 조건부 컴파일을 진행하기 때문이다.


[4. 간단한 kafka producer 작성]

https://github.com/jdaeman/kafkaStudy/blob/b70df69b6ebcdb52940f2c9535bb50f200ce87b8/ex-producer.cpp


[5. producer 동작 방식 정리]

  • producer->produce() 시, 메시지는 실제 카프카 서버로 전송되지 않고,
  • producer 내 큐에 저장된다.
  • ERR_QUEUE_FULL 은 내부 큐가 full 하므로, 1초 동안 폴링 후, 다시 큐에 푸쉬해보도록 한다.
  • outq_len() 은 현재 큐에 저장 된 메시지 개수를 반환한다.
  • producer 가 동작 중인 상태에서, 카프카 서버 한대를 내리면, 나머지 카프카 서버 로 전송한다.
    # 단, 이 때는 토픽의 파티션 개수가 적어도 브로커 개수 만큼 있어야 한다.
  • 모든 카프카 서버로 메시지를 전달 할 수 없는 경우, 내부 큐에 계속 메시지를 저장하고,
  • 이 후, 카프카 서버 복구 시 카프카 서버로 전송한다.

'Open Source > Kafka' 카테고리의 다른 글

카프카 명령어 정리  (0) 2023.06.13
topic 생성 시 유의 할 점  (0) 2023.06.09
카프카 서버 설정 값 정리  (0) 2023.02.15
Kafka 기본 개념  (0) 2022.02.26
Kafka 설치 및 실행  (0) 2022.02.20