[1. 개요]
- the Apache Kafka C/C++ client library
- librdkafka 는 C/C++ 환경에서 kafka 클라이언트 구현을 위한 라이브러리
- 로컬 환경에서 라이브러리 빌드 방법을 정리한다.
[2. 개발환경]
- OS : Windows
- Compiler : mingw64
리눅스도 비슷한 방식으로 진행한다.
[3. 라이브러리 빌드]
- wget https://github.com/confluentinc/librdkafka/archive/refs/tags/v2.1.1.zip
# 혹은 git clone https://github.com/confluentinc/librdkafka - 압축 해제
- cd librdkafka-2.1.1
- mkdir build
- cd build
- cmake .. -G "MinGW Makefiles"
- mingw32-make.exe
정상적으로 빌드 성공 시 산출물은 아래 경로에 존재한다.
- 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 |