transactions apache-kafka kafka-producer-api atomicity

transactions - Garantizar una transacción global única para los productores de Kafka



apache-kafka kafka-producer-api (1)

Con la última versión de Kafka 0.11.0.0, el equipo de Apache está presentando el productor idempotente y las transacciones. ¿Es posible garantizar que un conjunto completo de mensajes (por ejemplo, 1 millón) que queremos registrar, se comprometerá solo al final? Me gustaría que, si, por ejemplo, los productores pierden la conexión con los intermediarios y no pueden volver a estabilizarlo, los consumidores no vean ningún mensaje. ¿Es posible?


Sí, esto es posible usando Transacciones en su productor. Comienza una transacción, publica todos sus mensajes y luego confirma la transacción. Todos los mensajes se escriben en Kafka uno a la vez, pero los consumidores en el nuevo modo READ_COMMITTED solo verán los mensajes después de que el productor haya confirmado la transacción y se haya agregado un marcador de transacción especial al registro de confirmación de Kafka.

Los consumidores que no están en el modo READ_COMMITTED pueden ver los mensajes a medida que se escriben de forma individual, aunque es posible que aún no se hayan comprometido (o que nunca).

Existe un límite en cuanto a la cantidad de tiempo que una transacción abierta puede permanecer sin compromiso, por lo que eventualmente, si el productor fallece y no finaliza explícitamente la transacción, se excederá y revertirá y los consumidores READ_COMMITTED nunca verán esos mensajes.