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>
using namespace std;
using namespace cppkafka;
int main() {
// 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 >= 3.9.2
- A compiler with good C++11 support (e.g. gcc >= 4.8). This was tested successfully on g++ 4.8.3.
- The boost library (for boost::optional)
Now, in order to build, just run:
mkdir build
cd build
cmake <OPTIONS> ..
make
make install
The following cmake options can be specified:
RDKAFKA_ROOT
: Specify a different librdkafka install directory.RDKAFKA_DIR
: Specify a different directory where the RdKafkaConfig.cmake is installed.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
.CPPKAFKA_CONFIG_DIR
: Install location of the cmake configuration files. Default islib/cmake/cppkafka
.CPPKAFKA_PKGCONFIG_DIR
: Install location of the .pc file. Default isshare/pkgconfig
.CPPKAFKA_EXPORT_PKGCONFIG
: Generatecppkafka.pc
file. Default isON
.CPPKAFKA_EXPORT_CMAKE_CONFIG
: Generate CMake config, target and version files. Default isON
.
Example:
cmake -DRDKAFKA_ROOT=/some/other/dir -DCPPKAFKA_BUILD_SHARED=OFF ...
If you want to use cppkafka, you'll need to link your application with:
- cppkafka
- rdkafka
If using CMake, this is simplified by doing:
find_package(CppKafka REQUIRED)
target_link_libraries(<YourLibrary> CppKafka::cppkafka)
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.