Este proyecto se origina en mi interés por comprender el funcionamiento de los sistemas distribuidos, desarrollado durante las clases de Sistemas Distribuidos y Sistemas Distribuidos Tolerantes a Fallos impartidas por los profesores María Isabel Muñoz y Sergio Arévalo en 2020. Aunque hoy jubilados, su enseñanza fundamentó mi exploración de Apache Kafka, herramienta eficaz para manejar grandes volúmenes de datos en tiempo real. Durante las clases prácticas, reconocí las capacidades del cliente Java de Kafka, pero también observé la documentación escasa y limitada de otros clientes como librdkafka (implementada en C/C++), tecnología respaldada por la empresa Confluent. Esta necesidad de conocimiento, junto con la disponibilidad de tiempo en esta nueva etapa de mi carrera profesional este 2025, motivó el desarrollo del proyecto, con el apoyo fundamental de mis tutores Gustavo Hernández y Silvia Uribe, quienes guiaron la investigación del presente trabajo académico.
El estudio contrasta el rendimiento del cliente oficial de Java para Apache Kafka con librdkafka. Aunque gran parte de la investigación existente se centra en los brokers de Kafka, el desempeño de los clientes —las aplicaciones que producen y consumen mensajes— resulta igualmente crucial pero menos documentado. Esta investigación aborda precisamente esa brecha, evaluando cómo se comportan ambos clientes en escenarios reales de alto volumen.
Para garantizar resultados confiables, implementé un enfoque de lazy benchmarking utilizando el framework Ducktape, ejecutando pruebas en un entorno controlado con Docker y hardware dedicado. Esta configuración permitió minimizar variables externas y asegurar la reproducibilidad. Las pruebas midieron métricas clave: throughput (registros/segundo y MB/s), tiempos de ejecución y latencias (percentiles 50, 99 y 99.9). Todo el proceso se realizó sobre Apache Kafka 4.0 en modo KRaft, una arquitectura moderna que elimina la dependencia de ZooKeeper.
Los hallazgos de este estudio sirven como referencia práctica para que profesionales y académicos diseñen sistemas distribuidos críticos basados en Kafka ayudándoles a seleccionar el cliente más adecuado según sus necesidades. Al evaluar escenarios reales, los resultados permiten seleccionar el cliente óptimo según requerimientos específicos, por ejemplo, si la prioridad es velocidad máxima, librdkafka muestra ventajas; cuando se requiere estabilidad, el cliente Java ofrece robustez. Además, la metodología empleada —con su entorno controlado y enfoque sistemático— puede replicarse como modelo para futuras evaluaciones de otros clientes escritos en otros lenguajes de programación.
Más allá de los resultados técnicos, este trabajo representa la culminación de un viaje personal y profesional que comenzó con preguntas surgidas en el aula y se fortaleció gracias al apoyo de mis tutores. La elección de enfocarse en dos clientes de Kafka y un conjunto acotado de pruebas y configuraciones permitió completar exitosamente el proyecto, sentando además las bases para futuras investigaciones que otros académicos podrán desarrollar en este campo de estudio.
Abstract:
This project originated from my interest in understanding how distributed systems work, which developed during the Distributed Systems and Fault-Tolerant Distributed Systems courses taught by professors María Isabel Muñoz and Sergio Arévalo in 2020. Although both professors are now retired, their teachings laid the foundation for my exploration of Apache Kafka, a powerful tool for handling large volumes of real-time data. During practical sessions, I recognized the capabilities of Kafka’s Java client but also noticed the limited documentation available for other clients such as librdkafka (implemented in C/C++), a technology supported by Confluent. This need for deeper understanding, combined with the availability of time in this new stage of my professional career in 2025, motivated the development of this project. I was supported throughout by my advisors Gustavo Hernández and Silvia Uribe, who guided the research behind this academic work.
The study compares the performance of the official Java client for Apache Kafka with that of librdkafka. While most existing research focuses on Kafka brokers, the performance of clients — the applications that produce and consume messages — is equally important but less documented. This research addresses that gap by evaluating how both clients behave under high-volume, real-world scenarios.
To ensure reliable results, I implemented a lazy benchmarking approach using the Ducktape framework, running tests in a controlled Docker environment on dedicated hardware. This setup minimized external variables and ensured reproducibility. The tests measured key performance metrics: throughput (records per second and MB/s), execution times, and latency percentiles (50th, 99th, and 99.9th). All tests were conducted using Apache Kafka 4.0 in KRaft mode, a modern architecture that removes the dependency on ZooKeeper.
The findings of this study serve as a practical reference for professionals and researchers designing critical distributed systems based on Kafka, helping them choose the most suitable client according to their needs. By testing real scenarios, the results highlight the strengths of each client: for example, librdkafka performs better when maximum speed is required, while the Java client offers greater stability and robustness. Moreover, the testing methodology — with its controlled environment and systematic approach — can be reused as a model for future evaluations of other Kafka clients written in different programming languages.
Beyond technical results, this project represents the culmination of a personal and professional journey that began with questions in the classroom and grew stronger thanks to the support of my advisors. The decision to focus on two Kafka clients and a well-defined set of tests and configurations made it possible to complete the project successfully, while also laying the groundwork for future research that other academics may continue in this field.
Este proyecto se origina en mi interés por comprender el funcionamiento de los sistemas distribuidos, desarrollado durante las clases de Sistemas Distribuidos y Sistemas Distribuidos Tolerantes a Fallos impartidas por los profesores María Isabel Muñoz y Sergio Arévalo en 2020. Aunque hoy jubilados, su enseñanza fundamentó mi exploración de Apache Kafka, herramienta eficaz para manejar grandes volúmenes de datos en tiempo real. Durante las clases prácticas, reconocí las capacidades del cliente Java de Kafka, pero también observé la documentación escasa y limitada de otros clientes como librdkafka (implementada en C/C++), tecnología respaldada por la empresa Confluent. Esta necesidad de conocimiento, junto con la disponibilidad de tiempo en esta nueva etapa de mi carrera profesional este 2025, motivó el desarrollo del proyecto, con el apoyo fundamental de mis tutores Gustavo Hernández y Silvia Uribe, quienes guiaron la investigación del presente trabajo académico.
El estudio contrasta el rendimiento del cliente oficial de Java para Apache Kafka con librdkafka. Aunque gran parte de la investigación existente se centra en los brokers de Kafka, el desempeño de los clientes —las aplicaciones que producen y consumen mensajes— resulta igualmente crucial pero menos documentado. Esta investigación aborda precisamente esa brecha, evaluando cómo se comportan ambos clientes en escenarios reales de alto volumen.
Para garantizar resultados confiables, implementé un enfoque de lazy benchmarking utilizando el framework Ducktape, ejecutando pruebas en un entorno controlado con Docker y hardware dedicado. Esta configuración permitió minimizar variables externas y asegurar la reproducibilidad. Las pruebas midieron métricas clave: throughput (registros/segundo y MB/s), tiempos de ejecución y latencias (percentiles 50, 99 y 99.9). Todo el proceso se realizó sobre Apache Kafka 4.0 en modo KRaft, una arquitectura moderna que elimina la dependencia de ZooKeeper.
Los hallazgos de este estudio sirven como referencia práctica para que profesionales y académicos diseñen sistemas distribuidos críticos basados en Kafka ayudándoles a seleccionar el cliente más adecuado según sus necesidades. Al evaluar escenarios reales, los resultados permiten seleccionar el cliente óptimo según requerimientos específicos, por ejemplo, si la prioridad es velocidad máxima, librdkafka muestra ventajas; cuando se requiere estabilidad, el cliente Java ofrece robustez. Además, la metodología empleada —con su entorno controlado y enfoque sistemático— puede replicarse como modelo para futuras evaluaciones de otros clientes escritos en otros lenguajes de programación.
Más allá de los resultados técnicos, este trabajo representa la culminación de un viaje personal y profesional que comenzó con preguntas surgidas en el aula y se fortaleció gracias al apoyo de mis tutores. La elección de enfocarse en dos clientes de Kafka y un conjunto acotado de pruebas y configuraciones permitió completar exitosamente el proyecto, sentando además las bases para futuras investigaciones que otros académicos podrán desarrollar en este campo de estudio.
Abstract:
This project originated from my interest in understanding how distributed systems work, which developed during the Distributed Systems and Fault-Tolerant Distributed Systems courses taught by professors María Isabel Muñoz and Sergio Arévalo in 2020. Although both professors are now retired, their teachings laid the foundation for my exploration of Apache Kafka, a powerful tool for handling large volumes of real-time data. During practical sessions, I recognized the capabilities of Kafka’s Java client but also noticed the limited documentation available for other clients such as librdkafka (implemented in C/C++), a technology supported by Confluent. This need for deeper understanding, combined with the availability of time in this new stage of my professional career in 2025, motivated the development of this project. I was supported throughout by my advisors Gustavo Hernández and Silvia Uribe, who guided the research behind this academic work.
The study compares the performance of the official Java client for Apache Kafka with that of librdkafka. While most existing research focuses on Kafka brokers, the performance of clients — the applications that produce and consume messages — is equally important but less documented. This research addresses that gap by evaluating how both clients behave under high-volume, real-world scenarios.
To ensure reliable results, I implemented a lazy benchmarking approach using the Ducktape framework, running tests in a controlled Docker environment on dedicated hardware. This setup minimized external variables and ensured reproducibility. The tests measured key performance metrics: throughput (records per second and MB/s), execution times, and latency percentiles (50th, 99th, and 99.9th). All tests were conducted using Apache Kafka 4.0 in KRaft mode, a modern architecture that removes the dependency on ZooKeeper.
The findings of this study serve as a practical reference for professionals and researchers designing critical distributed systems based on Kafka, helping them choose the most suitable client according to their needs. By testing real scenarios, the results highlight the strengths of each client: for example, librdkafka performs better when maximum speed is required, while the Java client offers greater stability and robustness. Moreover, the testing methodology — with its controlled environment and systematic approach — can be reused as a model for future evaluations of other Kafka clients written in different programming languages.
Beyond technical results, this project represents the culmination of a personal and professional journey that began with questions in the classroom and grew stronger thanks to the support of my advisors. The decision to focus on two Kafka clients and a well-defined set of tests and configurations made it possible to complete the project successfully, while also laying the groundwork for future research that other academics may continue in this field. Read More


