¿Cuándo debería considerar adoptar Apache Kafka?
Apache Kafka es una plataforma distribuida de streaming de eventos que conviene considerar cuando varios sistemas necesitan consumir los mismos eventos de forma independiente y el historial de eventos debe conservarse durante un período para poder volver a leerse más adelante. En lugar de elegirla simplemente porque se necesita procesamiento asíncrono, es mejor evaluar si se necesitan conjuntamente múltiples suscripciones, procesamiento de alto volumen, reprocesamiento y tolerancia a fallos. kafka.apache.org
Kafka suele describirse como una "cola de mensajes", pero esa etiqueta por sí sola no explica completamente su valor principal. Destaca al registrar como eventos hechos ocurridos en un sistema —como la creación de un pedido, la finalización de un pago, una acción de un cliente o un registro del sistema— y permitir después que varias aplicaciones y sistemas de datos los lean a su propio ritmo. En cambio, si un servicio pequeño solo necesita procesar una vez un tipo de tarea en segundo plano, la complejidad operativa de Kafka puede superar sus beneficios.
Este artículo primero define los problemas que resuelve Kafka y después examina las señales que incrementan el valor de adoptarlo y las compensaciones implicadas en su diseño y operación.
¿Qué tipo de plataforma es Kafka?
Kafka funciona en torno a temas que registran eventos. Un evento es un registro de datos que representa un hecho ocurrido en un sistema, como "se creó un pedido", "un usuario vio un producto" o "se midió la temperatura de un sensor". Las aplicaciones que escriben eventos se denominan productores, mientras que las aplicaciones que los leen y procesan se denominan consumidores. kafka.apache.org
Los productores publican eventos en temas, y los consumidores se suscriben a los temas que necesitan y los leen. Los productores no necesitan saber directamente quién lee sus eventos. Incluso si más adelante se añade un servicio de analítica, de notificaciones o de indexación de búsqueda, el servicio de pedidos puede, en principio, publicar el mismo evento de pedido sin añadir continuamente código de integración independiente para cada sistema. Esto es un acoplamiento débil entre productores y consumidores. kafka.apache.org
Además, los eventos de Kafka no desaparecen inmediatamente después de que un consumidor los lee. Se almacenan según las políticas de retención a nivel de tema, mientras que los consumidores gestionan posiciones que indican hasta dónde han leído. Esto permite que un consumidor nuevo lea registros históricos o que uno existente reprocesse desde un punto concreto después de corregir un error. kafka.apache.org
Por este motivo, es más útil entender Kafka como una plataforma que "mantiene un historial de eventos compartible" que como una que simplemente "entrega mensajes". La retención no significa conservar los datos para siempre, sin embargo. La duración real de la retención debe determinarse en función de las políticas del tema y la planificación de la capacidad de almacenamiento.
¿Cómo trabajan juntos los componentes principales?
Distinguir los componentes principales de Kafka facilita las decisiones de adopción y el análisis de incidentes.
| Componente | Función | Qué considerar al decidir si se adopta |
|---|---|---|
| Tema | Un flujo lógico que agrupa eventos de naturaleza similar | Es necesario definir el significado de los eventos, el período de retención y los permisos de acceso. |
| Partición | Una unidad de registro ordenado que divide un tema | Se convierte en la unidad de rendimiento, paralelismo y garantías de orden. |
| Productor | Una aplicación que escribe eventos en un tema | Es necesario determinar las claves de los eventos y el comportamiento de reintento ante fallos. |
| Consumidor | Una aplicación que lee eventos de un tema | Es necesario diseñar para el procesamiento duplicado, el retraso y la recuperación de errores. |
| Grupo de consumidores | Una colección de consumidores que divide el trabajo | Las particiones se distribuyen entre los consumidores del mismo grupo. |
| Broker | Un servidor de Kafka que almacena y sirve eventos | Es la unidad operativa para la replicación, los dominios de fallo y la capacidad de almacenamiento. |
Un tema se divide en una o más particiones. Una partición es un registro ordenado de eventos, y Kafka utiliza varias particiones para paralelizar las lecturas y escrituras. Por lo tanto, el número de particiones no es solo un valor de configuración; es una decisión de diseño que refleja conjuntamente el rendimiento objetivo, el paralelismo de los consumidores y los requisitos de orden. kafka.apache.org
Un grupo de consumidores es una colección de instancias de consumidores que realizan la misma tarea. Por ejemplo, si varias instancias de consumidores cargan eventos de pedidos en un almacén de datos, pueden formar un grupo. Dentro del grupo, cada partición puede asignarse a un consumidor para dividir la carga de procesamiento. En cambio, un servicio de notificaciones y un servicio de analítica pertenecen a grupos distintos, por lo que cada uno puede leer de forma independiente los mismos eventos de pedido. kafka.apache.org
Esta estructura es favorable para el escalado, pero tener más consumidores activos en un grupo que particiones no significa que todos puedan procesar más particiones simultáneamente. No debe esperarse que el paralelismo crezca sin límite solo aumentando el número de instancias. Desde el inicio, la planificación de particiones debe considerar conjuntamente la distribución real de las claves y las necesidades futuras de escalado.
¿Qué problemas hacen que Kafka encaje mejor?
La señal de adopción más fuerte es una situación en la que varios sistemas necesitan consumir un evento con distintos fines y a diferentes velocidades. Lo importante no es el número de consumidores en sí, sino si los consumidores necesitan evolucionar de forma independiente del productor.
Pensemos en un sistema de comercio electrónico en el que se crea un pedido. Al principio, puede ser suficiente con actualizar solo la base de datos de pedidos. Más adelante, pueden añadirse la reserva de inventario, los flujos de pago, las notificaciones al cliente, la detección de fraude, las actualizaciones de datos de búsqueda y recomendaciones, y la carga para analítica. Si cada capacidad sigue conectándose al servicio de pedidos mediante llamadas síncronas, la latencia o el fallo de una función puede afectar a la ruta de procesamiento de pedidos, y las relaciones de integración pueden volverse complejas.
En este caso, el servicio de pedidos puede publicar un evento order created, mientras que cada sistema posterior lee los eventos que necesita mediante un grupo de consumidores separado. Un caso de uso clave de Kafka es la capacidad de añadir nuevos consumidores sin modificar directamente el productor existente. kafka.apache.org
Vale especialmente la pena evaluar las siguientes situaciones:
- Hay eventos centrales, como cambios en el estado de pedidos, pagos o membresías, que varios sistemas empresariales consultan.
- Datos como clics de usuarios, vistas de páginas, registros operativos o mediciones se acumulan continuamente.
- La analítica, las notificaciones, la indexación y la carga en el almacén de datos necesitan cada una los mismos eventos de origen.
- El flujo de producción debe continuar incluso cuando los consumidores tienen distintas velocidades de procesamiento y puntos de recuperación después de fallos.
- Cuando surge un nuevo caso de uso, conectar directamente el servicio de origen con todos los sistemas posteriores resulta costoso.
Cualquiera de estas condiciones por sí sola no significa necesariamente que Kafka sea necesario. Pero si varias se cumplen al mismo tiempo y es probable que cada flujo de datos crezca, una arquitectura de streaming de eventos puede ofrecer más beneficios que las integraciones simples punto a punto.
¿Cómo absorbe Kafka un alto volumen y fluctuaciones pronunciadas?
Kafka está diseñado para distribuir las lecturas y escrituras de eventos mediante particiones, por lo que puede utilizarse para flujos de datos que generan continuamente grandes cantidades de eventos. Entre los ejemplos típicos se incluyen la agregación de registros, el seguimiento de actividad de usuarios, las métricas de monitorización, las mediciones de IoT y los eventos de transacciones. kafka.apache.org
El papel de Kafka en este caso es reducir el acoplamiento que exige que las velocidades de producción y consumo siempre coincidan. Por ejemplo, si los eventos se disparan durante un período concreto, es posible que los consumidores no puedan procesarlos todos de inmediato. Si los eventos se conservan, los consumidores pueden ponerse al día con la acumulación. Esto da a los consumidores margen para ajustar su ritmo de procesamiento de forma independiente sin bloquear a los productores.
Eso no significa que el retraso desaparezca. Más bien, significa que el retraso puede gestionarse como una acumulación de eventos registrados. El retraso del consumidor es una métrica operativa que indica cuánto se ha quedado atrás un consumidor respecto a los eventos más recientes. Si el retraso continúa aumentando, deben investigarse el rendimiento del consumidor, las dependencias externas, la distribución de particiones y los reintentos por error. Kafka proporciona métricas de monitorización basadas en JMX, y los entornos de producción también deben considerar la seguridad de las rutas de acceso a la monitorización. kafka.apache.org
Al evaluar los requisitos de rendimiento, es mejor separar las siguientes preguntas en lugar de decir vagamente que "el tráfico es alto":
- ¿Cuántos eventos ocurren por segundo o durante cada período de tiempo?
- ¿Cuáles son los tamaños medio y máximo de un solo evento?
- ¿Cuánto duran los picos?
- ¿Qué cantidad de retraso del consumidor es aceptable?
- ¿Con qué rapidez debe procesarse la acumulación después de una interrupción?
- ¿Durante cuánto tiempo deben conservarse los eventos?
Responder a estas preguntas revela que el número de particiones, la capacidad de almacenamiento, la replicación, el escalado de consumidores y el tiempo de reprocesamiento son aspectos conectados. Kafka proporciona una base para un alto rendimiento, pero el rendimiento y el coste reales varían según el tamaño de los eventos, el sesgo de claves, las políticas de retención y los cuellos de botella en la lógica de los consumidores.
¿Por qué el reprocesamiento es un motivo importante para adoptar Kafka?
El procesamiento en tiempo real es el trabajo que produce un resultado inmediatamente después de que llega un evento. Algunos ejemplos son actualizar el inventario después de un pedido, detectar transacciones que cumplen determinadas condiciones o agregar métricas por minuto. Sin embargo, reprocesar datos históricos puede ser un requisito tan importante como el procesamiento en tiempo real.
El reprocesamiento es necesario por muchas razones. Después de corregir un error en el código de un consumidor, se pueden recrear resultados que faltaban o que se calcularon incorrectamente. Cuando se introducen nuevas reglas de analítica, se pueden crear datos derivados a partir del historial de eventos existente. Si el consumo se detiene debido a un fallo, es posible recuperarse leyendo de nuevo desde la última posición procesada. En Kafka, los eventos no se eliminan inmediatamente después de consumirse y pueden releerse dentro de la política de retención. kafka.apache.org
Por ejemplo, supongamos que los eventos de comportamiento de clientes se utilizaron inicialmente solo para agregar recuentos diarios de visitantes. Si más adelante se necesita un análisis de conversión por canal de adquisición, un grupo de consumidores separado puede leer eventos históricos y generar nuevos resultados analíticos, siempre que los campos requeridos estén incluidos en los eventos y el período de retención siga activo. El trabajo puede aislarse sin detener el consumidor de agregación existente ni realizar consultas a gran escala contra la base de datos del servicio de origen.
Sin embargo, la capacidad de reprocesar no resuelve por sí sola los problemas de calidad de datos. Si los eventos carecen de identificadores requeridos, marcas de tiempo de ocurrencia o información de versión, o si el significado del esquema cambió sin gestionar la compatibilidad, es difícil producir resultados fiables incluso cuando pueden leerse datos históricos. Además, un requisito de reprocesar datos más antiguos que el período de retención puede no satisfacerse solo con los temas de Kafka. Por tanto, si el reprocesamiento es un motivo de adopción, primero determine "qué se reproducirá, durante cuánto tiempo y con qué significado".
¿Puede Kafka también conectar bases de datos y sistemas externos?
Kafka puede utilizarse no solo para entregar eventos entre servicios, sino también como flujo central para canalizaciones de datos. La captura de datos modificados (CDC) es un enfoque para enviar a un flujo de datos los cambios que ocurren en una base de datos, y puede considerarse cuando los cambios en datos operativos deben reflejarse en analítica, búsqueda u otros servicios. Kafka Connect proporciona una API y un modelo de conectores para integraciones recurrentes de entrada y salida de datos con sistemas externos. kafka.apache.org
Entre los ejemplos en los que esta configuración puede ser útil se incluyen:
- Enviar continuamente cambios de una base de datos operativa a un repositorio analítico.
- Recopilar registros y métricas de varias aplicaciones en un flujo compartido.
- Reflejar los datos generados en un sistema en un índice o tabla derivada de otro almacén.
- Construir flujos continuos de datos entre entornos locales y en la nube.
El uso de conectores no elimina las diferencias en los modelos de datos, la semántica de eliminación, los problemas de orden, la gestión de acceso ni los límites de escritura de los sistemas de destino. En particular, al utilizar cambios de base de datos como eventos, debe distinguirse entre el hecho de que "cambió una fila" y el evento empresarial de que "se confirmó un pedido". El primero se acerca más a un cambio de almacenamiento, mientras que el segundo es un evento empresarial con significado de dominio. Tratarlos como si fueran lo mismo puede hacer que los consumidores dependan demasiado de la estructura de almacenamiento.
Por ello, adoptar Kafka para canalizaciones de datos resulta más fiable cuando hace más que reducir el número de conexiones: cuando también aclara los propietarios de los datos, los esquemas y la responsabilidad sobre los cambios.
¿Hasta qué punto está garantizado el orden y por qué importa el diseño de claves?
En Kafka, el orden de los eventos se garantiza dentro de una partición, no en todo un tema. Las múltiples particiones permiten el procesamiento en paralelo, pero no existe un único orden global entre ellas. kafka.apache.org
Por ejemplo, si el estado de un pedido debe procesarse en la secuencia created, payment completed y shipping started, puede usar el ID de pedido como clave para que los eventos del mismo pedido se registren en la misma partición. Esto permite utilizar el orden de los registros dentro de ese pedido como unidad. Los cambios de estado del cliente pueden diseñarse de manera similar usando el ID de cliente como clave.
Por el contrario, si todos los eventos de pedidos deben procesarse uno a uno en un orden cronológico global, puede requerirse en la práctica una elección cercana a una sola partición. En ese caso, el orden puede simplificarse, pero la capacidad de procesamiento en paralelo queda limitada. El orden global y un alto paralelismo no son propiedades que puedan obtenerse conjuntamente sin límite.
La selección de claves presenta otro problema. Si un cliente o dispositivo concreto genera un número inusualmente grande de eventos, esa clave puede concentrarse en una partición. Esto puede considerarse sesgo de claves, y solo algunos consumidores pueden estar excesivamente ocupados. Por ello, las claves deben representar la unidad empresarial que requiere orden, al tiempo que se evalúa que no generen un sesgo excesivo en la distribución de datos esperada.
Al documentar requisitos de orden, no se limite a decir que "el orden importa". Es mejor especificarlos de la siguiente manera:
- ¿Dentro de qué ámbito de identificador se requiere el orden?
- ¿Se requiere el orden por hora del evento o por hora de escritura del registro?
- ¿Cómo se tratarán los eventos que lleguen tarde?
- ¿Qué error empresarial se produce si los eventos llegan fuera de orden?
- ¿Se necesita orden global incluso a costa de reducir el paralelismo?
Las respuestas determinan la separación de temas, las claves, el número de particiones y la lógica de los consumidores.
¿Cómo deben entenderse el procesamiento duplicado y el procesamiento exactamente una vez?
Los consumidores de Kafka necesitan diseños que asuman el procesamiento al menos una vez de forma predeterminada, teniendo en cuenta fallos y reintentos. Por ejemplo, si un consumidor termina de procesar un evento pero se detiene antes de registrar su posición de procesamiento, puede volver a leer el mismo evento después de recuperarse. Por lo tanto, es posible procesar varias veces el mismo evento. kafka.apache.org
La solución práctica es hacer que la lógica del consumidor sea idempotente. La idempotencia es la propiedad de producir el mismo resultado final incluso cuando la misma operación se realiza varias veces. Por ejemplo, una operación como set the status of order 123 to delivered puede diseñarse de modo que repetir la misma actualización de estado no cambie materialmente el resultado. En cambio, una operación que unconditionally adds 1,000 points puede producir un resultado distinto si recibe el mismo evento dos veces, por lo que requiere una estrategia de deduplicación, como registrar los ID de eventos o usar restricciones de unicidad en el almacén de destino.
Al conectar lecturas, procesamiento y escrituras dentro de los temas de Kafka, Kafka admite configuraciones de procesamiento exactamente una vez mediante transacciones y el nivel de aislamiento read_committed. Sin embargo, esto no debe entenderse como que cada efecto externo ocurre automáticamente una sola vez. Los efectos secundarios fuera de Kafka, como actualizaciones de bases de datos externas, entrega de correos electrónicos o llamadas a API de pago, requieren coordinación con el sistema de destino y un diseño independiente. kafka.apache.org
Por tanto, antes de la adopción, plantee las siguientes preguntas para cada consumidor:
- ¿Qué ocurre si el mismo evento se procesa dos veces?
- ¿Cada evento tiene un ID que pueda utilizarse para detectar duplicados?
- ¿El almacén de resultados evita duplicados o permite actualizaciones seguras?
- ¿Cuáles son los criterios de reintento cuando falla una llamada externa o su respuesta no está clara?
- ¿Cómo se manejarán los efectos secundarios ya realizados durante el reprocesamiento?
Si se adopta Kafka sin responder estas preguntas, el transporte en sí puede ser fiable mientras que los resultados empresariales duplicados o inconsistentes siguen siendo difíciles de detectar.
¿La tolerancia a fallos y la durabilidad están garantizadas automáticamente?
Kafka puede configurarse para prepararse ante fallos de brokers mediante la replicación de particiones de temas. Esto puede ser una ventaja importante para flujos de datos en los que son relevantes las particiones replicadas, el funcionamiento continuo durante fallos de brokers y la distribución de carga entre muchos consumidores. kafka.apache.org
Sin embargo, la conclusión de que "los datos nunca pueden perderse porque usamos Kafka" no es correcta. La durabilidad y disponibilidad reales dependen del factor de replicación, la configuración de confirmación de los productores, el alcance de los fallos que pueden producirse simultáneamente, las políticas de retención y los procedimientos operativos. Incluso con réplicas, los resultados pueden diferir de las expectativas si las réplicas se ubican en el mismo dominio de fallo, si configuraciones importantes no cumplen el nivel requerido o si los procedimientos de recuperación no han sido validados por los operadores. kafka.apache.org
Ayuda formular explícitamente los requisitos de tolerancia a fallos. Por ejemplo: "La producción y el consumo de eventos de pedidos deben continuar si un broker deja de funcionar", "Los duplicados son aceptables tras un fallo del consumidor, pero las omisiones no" o "Los eventos dentro de un período especificado deben poder reprocesarse". Estos requisitos determinan no solo la replicación y las confirmaciones, sino también la idempotencia de los consumidores, la monitorización, la capacidad de almacenamiento y los simulacros de recuperación.
Dado que el historial reprocesable puede convertirse en un activo de datos importante, debe evaluar por separado si los temas contienen información personal o datos empresariales confidenciales. El control de acceso y la seguridad de las interfaces operativas no son tareas posteriores separadas del diseño del flujo de datos. Las operaciones de Kafka también requieren configuraciones de seguridad para el acceso administrativo, incluida la monitorización. kafka.apache.org
¿Kafka siempre es mejor que una cola de trabajo simple o una API síncrona?
No. Kafka no es un sustituto automático para todos los requisitos asíncronos. Si el requisito se acerca más a "convertir una imagen una vez", "generar un informe y devolver solo el resultado" o "hacer que un consumidor tome y procese un trabajo", y la retención prolongada, las múltiples suscripciones y el reprocesamiento no son centrales, una cola de trabajo más simple o un servicio gestionado puede encajar mejor en coste y sobrecarga operativa. Las principales fortalezas de Kafka surgen cuando se combinan flujos de eventos a gran escala, múltiples consumidores independientes y la reutilización del historial conservado. kafka.apache.org
Las API síncronas también tienen un papel diferente. Una solicitud en la que un usuario pulsa un botón y necesita un resultado inmediato de éxito o error encaja naturalmente con una API de solicitud-respuesta. Una vez completada esa solicitud, el flujo de informar a los sistemas posteriores sobre el hecho puede separarse en eventos. En otras palabras, en lugar de elegir solo entre llamadas síncronas y Kafka, a menudo es más apropiado utilizar API para las interacciones de usuarios y eventos para la distribución asíncrona posterior.
La siguiente comparación puede simplificar la decisión:
| Necesidad principal | Enfoque que se debe evaluar primero | Condiciones en las que Kafka se vuelve especialmente ventajoso |
|---|---|---|
| Procesar un trabajo una vez | Cola de trabajo simple o servicio asíncrono gestionado | Cuando varios sistemas independientes deben leer el mismo resultado de trabajo o evento |
| Solicitud que requiere un resultado inmediato | API síncrona | Cuando después de completar la solicitud deben distribuirse de forma asíncrona diversos trabajos posteriores |
| Transferir datos entre sistemas | Integración directa o enfoque de archivo/lote | Cuando coexisten un flujo continuo, múltiples destinos y requisitos de reprocesamiento |
| Recopilar registros, comportamiento o datos de medición | Herramientas de recopilación y almacenamiento | Cuando varios consumidores deben procesar de forma independiente flujos de alto volumen |
| Gestionar el historial de cambios de estado | Base de datos empresarial | Cuando los eventos deben reproducirse para reconstruir el estado o datos derivados |
Esta tabla no es una regla absoluta para seleccionar productos. La plataforma existente de un equipo, la disponibilidad de servicios gestionados, las políticas de seguridad y la dotación de personal operativo también afectan a la decisión. La clave es la naturaleza del flujo de datos que se intenta resolver, más que una lista de funciones.
¿Qué debe prepararse para las operaciones y la gobernanza?
Adoptar Kafka no se limita a añadir una biblioteca de aplicación. También requiere un modelo operativo para gestionar continuamente temas, particiones, replicación, retención, permisos de acceso, monitorización y capacidad. Kafka proporciona métricas JMX, pero la información operativa solo crea valor real cuando se determina qué métricas activan alertas, quién responde y cómo se produce la recuperación. kafka.apache.org
En primer lugar, deben gestionarse los contratos de eventos. Un contrato de evento incluye no solo los nombres de los campos y los tipos de datos, sino también el significado empresarial de cada campo, si es opcional, cómo se gestionan los cambios de versión y la distinción entre el momento de producción y el momento de ocurrencia. Se necesitan estándares de compatibilidad para que los consumidores no funcionen incorrectamente de forma silenciosa cuando un productor elimina un campo o cambia su significado.
A continuación, las políticas de los temas deben estar claras. Para cada tema, debe decidir lo siguiente:
- Qué eventos contiene y quién es su propietario.
- Cuáles son el período de retención y los criterios de capacidad de almacenamiento.
- Qué requisitos de orden y rendimiento determinaron el número de particiones y la clave.
- Qué nivel de fallo pretenden abordar la replicación y las confirmaciones de los productores.
- Quién puede producir y consumir, y cómo se protegen los datos confidenciales.
- En qué nivel de retraso del consumidor comienzan la investigación y la respuesta.
La planificación de capacidad también es importante. Los períodos de retención más largos o una mayor replicación aumentan las necesidades de almacenamiento. Si los consumidores deben poder reprocesar después de haber estado detenidos durante mucho tiempo, es posible que el historial deba conservarse en consecuencia. Por el contrario, una retención corta puede reducir el coste, pero limita el rango de datos históricos disponible para la recuperación ante interrupciones o para la incorporación de nuevos consumidores. Esta elección define no solo los costes, sino también el alcance de las capacidades del producto y de la recuperabilidad.
En organizaciones con una responsabilidad operativa poco clara, una plataforma Kafka compartida puede aumentar en cambio los problemas de dependencia. Acordar qué cambios e incidentes son responsabilidad de los propietarios de los temas, los operadores de la plataforma, los responsables de seguridad y los equipos de desarrollo de consumidores es tan importante como la configuración técnica.
¿Qué preguntas debe utilizar para decidir antes de adoptar?
La pregunta que mejor distingue si se debe adoptar Kafka no es: "¿Necesitamos mensajes asíncronos?" Una pregunta más precisa es: ¿Varios consumidores independientes necesitan leer continuamente un historial de eventos a gran escala y reprocesarlo después de un retraso o un fallo? Si la respuesta es claramente afirmativa, es probable que sus requisitos estén alineados con las características principales de Kafka. kafka.apache.orgkafka.apache.org
Puede utilizar la siguiente lista de comprobación al iniciar conversaciones sobre adopción:
- Múltiples consumidores: ¿Varios sistemas necesitan actualmente, o necesitarán en un futuro próximo, utilizar el mismo evento de forma independiente?
- Valor del historial: ¿Los eventos deben conservarse después del consumo y releerse para corregir errores, realizar auditorías o nuevos análisis?
- Escala de procesamiento: ¿La ingesta sostenida de alto volumen o los picos de tráfico requieren desacoplar la producción del consumo?
- Ámbito de orden: ¿Puede resolverse el problema con orden por una clave, como cliente o pedido, en lugar de orden global?
- Manejo de duplicados: ¿Cada consumidor puede procesar o identificar con seguridad los eventos duplicados?
- Gestión de contratos: ¿Hay responsables y procesos para gestionar cambios en los esquemas y significados de los eventos?
- Preparación operativa: ¿Existe un responsable que pueda observar y responder al retraso, la capacidad de almacenamiento, los fallos de brokers, los permisos y el reprocesamiento?
- Comparación de alternativas: ¿El requisito podría cumplirse de forma más sencilla mediante la distribución de trabajos a un solo consumidor o solo con solicitud-respuesta?
No es necesario que todos los elementos sean perfectos desde el principio para adoptar Kafka. Pero si las necesidades de los puntos 1 a 5 son fuertes mientras falta la preparación en los puntos 6 y 7, puede haber una gran distancia entre la posibilidad técnica y un sistema operable. Puede ser útil validar primero los contratos de eventos, el manejo de duplicados, la observación del retraso y el reprocesamiento en un flujo de datos de alcance reducido.
Conclusión: Kafka es potente cuando el historial de eventos debe compartirse
Apache Kafka no es simplemente una herramienta para mover mensajes de forma asíncrona; es una plataforma que conserva flujos de eventos compartidos por varios sistemas y les permite consumir esos flujos de forma independiente. El valor de su adopción aumenta en entornos que necesitan múltiples suscripciones a los mismos eventos, procesamiento paralelo de flujos de datos de alto volumen, ponerse al día después de retrasos y reprocesar conjuntamente registros históricos. kafka.apache.orgkafka.apache.org
Por el contrario, las alternativas más sencillas pueden ser más adecuadas para requisitos que entregan trabajo puntual a un único consumidor, solicitudes centradas en respuestas inmediatas o flujos pequeños en los que debe minimizarse la sobrecarga operativa. Al elegir Kafka, evalúe no solo el rendimiento, sino también si está preparado para gestionar el orden a nivel de partición, el procesamiento duplicado, las políticas de retención, los contratos de eventos, la seguridad y la observabilidad. Cuanto más se cumplan estas condiciones, más podrá Kafka convertirse en una base para reducir el acoplamiento entre servicios y ampliar el uso de los datos.