¿Cuál es la mejor arquitectura de chispa (big data) crees que para este caso de uso?

No sé cómo construir arquitectura para el siguiente caso de uso:

Tengo una aplicación web donde los usuarios pueden cargar archivos (pdf y pptx) y directorios para procesar. Una vez completada la carga, la aplicación web coloca estos archivos y directorios en HDFS, luego envía un mensaje en kafka con la ruta a estos archivos.

La aplicación Spark leyó los mensajes de la transmisión kafka, los recopiló en el maestro (controlador) y luego los procesó. Primero recopilo mensajes porque necesito mover el código a los datos, y no mover los datos donde se recibe el mensaje. Entendí ese trabajo de asignación de chispa al ejecutor que ya tiene un archivo local.

Después del procesamiento de archivos, necesito guardar datos en PostgreSQL y ElasticSearch.

Leí sobre problemas de archivos pequeños de hadoop, y entiendo cuáles son los problemas en este caso. Leí que HBase es una mejor solución para guardar archivos pequeños que simplemente guardar en archivos hdf. Otro problema en los problemas de archivos pequeños de hadoop es la gran cantidad de mapeadores y reductores creados para el cómputo, pero no entiendo si este problema existe.

¿Cuál es la mejor arquitectura para este caso de uso? ¿Cómo hacer la programación del trabajo? ¿Kafka es bueno para eso? o necesito usar otro servicio como rabbitMQ o alguna otra cosa? ¿Existe algún método para agregar trabajos a una aplicación Spark en ejecución a través de alguna API REST? ¿Cómo es la mejor manera de guardar archivos? ¿Es mejor usar Hbase porque tengo archivos pequeños (<100 MB)? ¿O necesito usar SequenceFile? Creo que SequenceFile no es para mi caso de uso porque necesito reprocesar algunos archivos al azar.

¿Cuál es la mejor arquitectura que crees para este caso de uso?

Me di cuenta de que usar kafka no es para mi caso de uso. Creo que mi caso de uso es el procesamiento por lotes ETL, pero no sé cómo agregar trabajos a pedido, porque necesito reprocesar algunos archivos a pedido. Podría usar Flume para la ingestión de datos y detectar nuevos archivos en HDFS, pero no sé cómo resolver el problema con el reprocesamiento a pedido de algunos archivos seleccionados por el cliente

¡Gracias!