Actualización del 9 de abril de 2018 : hoy en día también puede usar ksqlDB , la base de datos de transmisión de eventos de Kafka, para procesar sus datos en Kafka. ksqlDB está construido sobre la API Streams de Kafka, y también viene con soporte de primera clase para "streams" y "tablas".
¿Cuál es la diferencia entre Consumer API y Streams API?
La API Streams de Kafka ( https://kafka.apache.org/documentation/streams/ ) se basa en los clientes productores y consumidores de Kafka. Es significativamente más poderoso y también más expresivo que el cliente consumidor de Kafka. Estas son algunas de las características de la API de Kafka Streams:
- Admite la semántica de procesamiento exactamente una vez (Kafka versiones 0.11+)
- Admite el procesamiento con estado tolerante a fallas (y sin estado, por supuesto), incluidas las uniones de transmisión , las agregaciones y el sistema de ventanas . En otras palabras, es compatible con la gestión del estado de procesamiento de su aplicación lista para usar.
- Soportes de procesamiento en tiempo evento así como el tratamiento basado en el procesamiento en tiempo y en tiempo ingestión
- Tiene soporte de primera clase para flujos y tablas , que es donde el procesamiento de flujos se encuentra con las bases de datos; En la práctica, la mayoría de las aplicaciones de procesamiento de secuencias necesitan tanto secuencias como tablas para implementar sus respectivos casos de uso, por lo que si una tecnología de procesamiento de secuencias carece de cualquiera de las dos abstracciones (por ejemplo, no hay soporte para tablas), usted está atascado o debe implementar manualmente esta funcionalidad usted mismo. (buena suerte con eso...)
- Admite consultas interactivas (también llamadas 'estado consultable') para exponer los últimos resultados de procesamiento a otras aplicaciones y servicios
- Es más expresivo: se distribuye con (1) un estilo de programación funcional DSL con operaciones tales como
map
, filter
, reduce
así como (2) un imperativo estilo API procesador para, por ejemplo haciendo el procesamiento de eventos complejos (CEP), y (3) se puede incluso combinar el DSL y la API del procesador.
Consulte http://docs.confluent.io/current/streams/introduction.html para obtener una introducción más detallada pero de alto nivel de la API de Kafka Streams, que también debería ayudarlo a comprender las diferencias con el consumidor de Kafka de nivel inferior cliente. También hay un tutorial basado en Docker para la API de Kafka Streams , sobre el que escribí en un blog a principios de esta semana.
Entonces, ¿en qué se diferencia la API de Kafka Streams, ya que también consume o produce mensajes en Kafka?
Sí, la API de Kafka Streams puede leer y escribir datos en Kafka.
y ¿por qué es necesario, ya que podemos escribir nuestra propia aplicación de consumidor utilizando la API de consumidor y procesarlas según sea necesario o enviarlas a Spark desde la aplicación de consumidor?
Sí, podría escribir su propia aplicación de consumidor; como mencioné, la API de Kafka Streams utiliza el cliente de consumidor de Kafka (más el cliente de productor), pero tendría que implementar manualmente todas las características únicas que proporciona la API de Streams. . Consulte la lista anterior para ver todo lo que obtiene "gratis". Por lo tanto, es una circunstancia bastante rara que un usuario elija el cliente de consumo de bajo nivel en lugar de la API Kafka Streams, que es más potente.