Al definir una topología en flujos kafka, se puede agregar una tienda de estado global. Necesitará un tema fuente, así como a ProcessorSupplier
. El procesador recibe registros y podría transformarlos teóricamente antes de agregarlos a la tienda. Pero en caso de restauración, los registros se insertan directamente desde el tema fuente (registro de cambios) en el almacén de estado global, omitiendo la eventual transformación realizada en el procesador.
+-------------+ +-------------+ +---------------+
| | | | | global |
|source topic -------------> processor +--------------> state |
|(changelog) | | | | store |
+-------------+ +-------------+ +---------------+
| ^
| |
+---------------------------------------------------------+
record directly inserted during restoration
StreamsBuilder # addGlobalStore (StoreBuilder storeBuilder, Tema de cadena, Consumido consumido, ProcessorSupplier stateUpdateSupplier) Agrega un StateStore global a la topología.
Según la documentación
NOTA: no debe usar el procesador para insertar registros transformados en el almacén de estado global . Esta tienda utiliza el tema de origen como registro de cambios y durante la restauración insertará registros directamente desde el origen . Este ProcessorNode debe usarse para mantener actualizado StateStore.
Paralelamente, ya que el error principal está actualmente abierto en el rastreador de errores kafka: el procesador personalizado KAFKA-7663 suministrado en addGlobalStore no se utiliza al restaurar el estado del tema que explica exactamente lo que se indica en la documentación, pero parece ser un error aceptado.
Me pregunto si KAFKA-7663 es realmente un error o no. Según la documentación, parece haber sido diseñado de esta manera, en cuyo caso me cuesta entender el caso de uso.
¿Alguien puede explicar los principales casos de uso de esta API de bajo nivel? Lo único que se me ocurre es procesar los efectos secundarios, como por ejemplo, realizar algunas operaciones de registro en el procesador.
Pregunta adicional: si el tema de origen actúa como el registro de cambios de la tienda global, cuando un registro se elimina del tema porque la retención ha expirado, ¿se eliminará de la tienda de estado global? O la eliminación solo tendrá lugar en la tienda después de una restauración completa de la tienda desde el registro de cambios.