Apache NiFi, de cero a un flujo resiliente con Kafka
Una guía de campo para entender el modelo mental de NiFi, levantar una instancia segura, construir un dataflow trazable y conectarlo con Kafka sin perder control operativo.
01 · Modelo mental
Primero, el modelo mental correcto
NiFi no es una colección de scripts conectados: es un motor de flujo. Cada pieza de datos viaja como un FlowFile, con contenido y atributos, mientras los procesadores la reciben, transforman, enrutan o entregan.
Las conexiones funcionan como colas explícitas. Esa separación permite ver presión, errores y rendimiento en el lienzo, y desacopla la velocidad de quien produce de la velocidad de quien consume.
FlowFile
Contenido más metadatos que acompañan a una unidad de datos durante todo su recorrido.
Processor
Unidad de trabajo que ingiere, transforma, enruta o publica uno o varios FlowFiles.
Connection
Cola entre procesadores con prioridades, límites y back pressure configurables.
Diseña para observar, no solo para mover
Un flujo sano hace visibles sus colas, relaciones de error y puntos de reintento. Si solo modelas el camino feliz, la operación terminará ocurriendo fuera de NiFi.
02 · Primer arranque
Levanta NiFi y asegura el acceso
Después de extraer la distribución, usa el script del sistema operativo para iniciar NiFi. Esperar la inicialización evita interpretar un arranque todavía incompleto como una falla.
# Linux / macOS
bin/nifi.sh start --wait-for-init 120
bin/nifi.sh status
# Windows (PowerShell)
.\bin\nifi.cmd start
.\bin\nifi.cmd statusLa instalación genera credenciales iniciales en el log. Para un entorno local controlado, puedes reemplazarlas explícitamente antes de abrir https://localhost:8443/nifi.
./bin/nifi.sh set-single-user-credentials nifi-admin 'use-a-strong-password'Local no significa sin seguridad
Mantén HTTPS, usa una contraseña fuerte y nunca reutilices las credenciales del ejemplo. En producción, configura certificados confiables, autenticación y autorización antes de exponer la interfaz.
03 · Diseñar el flujo
Construye un flujo que explique su intención
Para un ingreso HTTP que termina en Kafka, mantén cada responsabilidad visible. Este recorrido mínimo separa recepción, validación, normalización y entrega.
- 1
Ingiere
Usa ListenHTTP o InvokeHTTP según NiFi reciba una solicitud o consulte una fuente externa.
- 2
Valida
Verifica esquema, tamaño y campos obligatorios; enruta lo inválido a una relación dedicada.
- 3
Normaliza
Trabaja con Record Readers y Writers para transformar JSON, CSV o Avro sin lógica accidental.
- 4
Entrega
Publica con PublishKafka y conserva una ruta de failure observable, limitada y recuperable.
NiFi Expression Language
${filename:matches(".*\.json"):and(${fileSize:lt(10485760)})}Expression Language opera sobre atributos del FlowFile. Úsalo para decisiones pequeñas y legibles; para datos estructurados, prefiere RecordPath y procesadores orientados a records.
04 · Apache Kafka
Kafka como columna de eventos, NiFi como orquestador
Kafka almacena eventos en topics y desacopla productores de consumidores. NiFi aporta el borde visual: ingesta, transformación, enrutamiento, control de presión y trazabilidad antes o después del broker.
Para una prueba local, inicia el broker oficial y crea un topic. Después configura Kafka3ConnectionService y referencia ese servicio desde PublishKafka o ConsumeKafka.
docker pull apache/kafka:4.3.1
docker run --name kafka-local -p 9092:9092 -d apache/kafka:4.3.1bin/kafka-topics.sh --create \
--topic nifi-events \
--bootstrap-server localhost:9092
bin/kafka-topics.sh --describe \
--topic nifi-events \
--bootstrap-server localhost:9092Kafka Connection ServiceKafka3ConnectionServiceTopicsnifi-eventsGroup IDnifi-consumersProcessing StrategyRECORDDefine la semántica de entrega
Alinea acks, commits de offsets, reintentos y rutas de failure con el nivel de duplicación o pérdida tolerable. Exactly-once no aparece por conectar dos cajas: exige una estrategia completa.
05 · Producción
Antes de llamarlo producción
La confiabilidad de un dataflow depende menos de cuántos procesadores tiene y más de qué ocurre cuando una dependencia se ralentiza, un registro no valida o un nodo se reinicia.
Back pressure consciente
Fija umbrales por objetos y tamaño para que una cola proteja al sistema sin ocultar saturación.
Provenance útil
Conserva la trazabilidad el tiempo necesario para diagnosticar, auditar y reconstruir el recorrido de un FlowFile.
Configuración por contexto
Extrae endpoints y valores operativos a Parameter Contexts; marca secretos como sensibles.
Fallos con destino
Enruta, limita y alerta los errores. No auto-termines relaciones que puedan representar pérdida de datos.
El mejor lienzo es el que se puede operar
Empieza con pocos procesadores, nombres que expliquen intención y relaciones de error visibles. Agrega Kafka cuando necesites desacoplamiento y retención de eventos, no para esconder un flujo que todavía no entiendes.
Fuentes de verdad
Profundiza en la documentación oficial
Estas referencias llevan directamente a Apache NiFi y Apache Kafka. Las versiones evolucionan; valida allí propiedades, requisitos y comportamiento antes de operar un entorno real.