cppkafka allows C++ applications to consume and produce messages using the Apache Kafka protocol. The library is built on top of librdkafka, and provides a high level API that uses modern C++ features to make it easier to write code while keeping the wrapper's performance overhead to a minimum.
cppkafka is a high level C++ wrapper for rdkafka, aiming to allow using rdkafka in a simple, less error prone way.
cppkafka provides an API to produce messages as well as consuming messages, but the latter is only supported via the high level consumer API. cppkafka requires rdkafka >= 0.9.4 in order to use it. Other wrapped functionalities are also provided, like fetching metadata, offsets, etc.
cppkafka provides message header support. This feature requires rdkafka >= 0.11.4.
cppkafka tries to add minimal overhead over librdkafka. A very thin wrapper for librdkafka messages is used for consumption so there's virtually no overhead at all.
cppkafka's API is simple to use. For example, this code creates a producer that writes a message into some partition:
#include<cppkafka/cppkafka.h>usingnamespacestd;usingnamespacecppkafka;intmain() {
// Create the config
Configuration config = {
{ "metadata.broker.list", "127.0.0.1:9092" }
};
// Create the producer
Producer producer(config);
// Produce a message!
string message = "hey there!";
producer.produce(MessageBuilder("my_topic").partition(0).payload(message));
producer.flush();
}In order to compile cppkafka you need:
- librdkafka >= 0.9.4
- CMake
- A compiler with good C++11 support (e.g. gcc >= 4.8). This was tested successfully on g++ 4.8.3.
- The boost library.
Now, in order to build, just run:
mkdir build
cd build
cmake <OPTIONS> ..
makeThe following cmake options can be specified:
RDKAFKA_ROOT_DIR: Specify a different librdkafka install directory.BOOST_ROOT: Specify a different Boost install directory.CPPKAFKA_CMAKE_VERBOSE: Generate verbose output. Default isOFF.CPPKAFKA_BUILD_SHARED: Build cppkafka as a shared library. Default isON.CPPKAFKA_DISABLE_TESTS: Disable build of cppkafka tests. Default isOFF.CPPKAFKA_DISABLE_EXAMPLES: Disable build of cppkafka examples. Default isOFF.CPPKAFKA_BOOST_STATIC_LIBS: Link with Boost static libraries. Default isON.CPPKAFKA_BOOST_USE_MULTITHREADED: Use Boost multi-threaded libraries. Default isON.CPPKAFKA_RDKAFKA_STATIC_LIB: Link to Rdkafka static library. Default isOFF.
Example:
cmake -DRDKAFKA_ROOT_DIR=/some/other/dir -DCPPKAFKA_BUILD_SHARED=OFF ...The RDKAFKA_ROOT_DIR must contain the following structure. If the system
architecture is 64-bit and both lib and lib64 folders are available, the lib64
folder location will be selected by cmake.
${RDKAFKA_ROOT_DIR}/
|
+ include/librdkafka/rdkafka.h
|
+ lib/librdkafka.a
|
+ lib64/librdkafka.a (optional)If you want to use cppkafka, you'll need to link your application with:
- cppkafka
- rdkafka
You can generate the documentation by running make docs inside the build directory. This requires
Doxygen to be installed. The documentation will be written in html format at
<build-dir>/docs/html/.
Make sure to check the wiki which includes some documentation about the project and some of its features.