lunes, 20 de octubre de 2025

Conceptos básicos de Apache Kafka

Apache Kafka es una plataforma distribuida de mensajería y streaming diseñada para manejar grandes volúmenes de datos en tiempo real. Desarrollada originalmente por LinkedIn y posteriormente donada a la Apache Software Foundation, permite la publicación, suscripción, almacenamiento y procesamiento de flujos de eventos de manera eficiente y escalable. Su arquitectura se basa en el modelo publish-subscribe, donde los productores envían mensajes a topics y los consumidores los leen, garantizando alta disponibilidad y tolerancia a fallos.

Kafka se destaca por su capacidad de procesar millones de mensajes por segundo, lo que lo convierte en una herramienta clave para sistemas de análisis en tiempo real, integración de microservicios y comunicación asíncrona entre aplicaciones distribuidas. Su diseño basado en brokers, partitions y replication asegura que los datos estén distribuidos y redundantes, mejorando el rendimiento y la confiabilidad del sistema.

Además, Kafka incluye componentes complementarios como Kafka Connect, para integrar fuentes y destinos de datos externos, y Kafka Streams, para el procesamiento de flujos directamente sobre los mensajes en tránsito. Gracias a su flexibilidad y robustez, Kafka es ampliamente utilizado por empresas como Netflix, Uber o Spotify para construir arquitecturas orientadas a eventos y sistemas de análisis en tiempo real.

Terminología:

Mensajería: La mensajería en Kafka se refiere al intercambio de información mediante mensajes entre aplicaciones o componentes distribuidos. Kafka actúa como un sistema de mensajería persistente y escalable que permite enviar, almacenar y procesar mensajes en tiempo real, facilitando la comunicación asíncrona entre microservicios o sistemas independientes.

Streaming: El streaming es el procesamiento continuo y en tiempo real de flujos de datos que se generan de forma constante, como transacciones, clics o lecturas de sensores. En Kafka, el streaming permite analizar y reaccionar a los eventos a medida que ocurren, en lugar de hacerlo de forma diferida, lo que es ideal para sistemas de monitoreo, analítica en tiempo real y arquitecturas orientadas a eventos.

Modelo publish-subscribe: El modelo publish-subscribe (publicar-suscribirse) es un patrón de comunicación asíncrono en el que los productores (publishers) envían mensajes a un canal o tema común sin conocer a los receptores, y los consumidores (subscribers) se suscriben a esos temas para recibir los mensajes que les interesan. Este modelo desacopla la producción y el consumo de datos, lo que permite que los sistemas sean más escalables, flexibles y resistentes a fallos.

Topics: En Kafka, un topic es una categoría o canal lógico donde se publican los mensajes. Los producers envían los datos a un topic, y los consumers los leen desde allí. Cada topic puede dividirse en varias partitions para mejorar el rendimiento y la escalabilidad, y Kafka garantiza el orden de los mensajes dentro de una misma partición.

Brokers: Un broker es un servidor dentro del clúster de Kafka responsable de almacenar los mensajes publicados y servirlos a los consumidores. Cada broker maneja un conjunto de topics y partitions, y trabaja coordinadamente con otros brokers para balancear la carga y mantener la disponibilidad del sistema.

Partitions: Las partitions son divisiones físicas dentro de un topic que permiten distribuir los datos entre varios brokers. Cada partición es una secuencia ordenada e inmutable de mensajes, lo que permite procesar los datos en paralelo. Gracias a las partitions, Kafka puede escalar horizontalmente y mantener el orden de los mensajes en cada una.

Replication: La replication (replicación) es el mecanismo mediante el cual Kafka duplica las partitions en distintos brokers para asegurar la disponibilidad y tolerancia a fallos. Cada partición tiene un leader (que maneja las lecturas y escrituras) y uno o más followers (copias de respaldo). Si un broker falla, otro puede asumir el rol de leader sin pérdida de datos.

Comparación con otros sistemas similares

Las diferencias más importantes de Apache Kafka frente a otros sistemas de mensajería o streaming (como RabbitMQ, ActiveMQ o Amazon Kinesis) se pueden resumir en los siguientes puntos clave:

1.- Modelo de almacenamiento persistente: A diferencia de la mayoría de los message brokers tradicionales, Kafka almacena los mensajes en disco de forma duradera y eficiente, permitiendo que los consumidores los lean varias veces. Esto lo convierte no solo en un sistema de mensajería, sino también en una base de datos de eventos (event log) distribuida, ideal para auditoría y reprocesamiento.

2.- Alto rendimiento y escalabilidad horizontal: Kafka puede manejar millones de mensajes por segundo gracias a su arquitectura basada en partitions y brokers distribuidos. Escalar el sistema es tan simple como añadir nuevos brokers o particiones, mientras que en sistemas como RabbitMQ el rendimiento se degrada más rápidamente con el aumento del volumen de datos.

3.- Procesamiento en tiempo real: Kafka está diseñado no solo para transportar mensajes, sino también para procesarlos en flujo mediante Kafka Streams o integraciones con sistemas como Flink o Spark Streaming, lo que lo diferencia de los brokers tradicionales centrados solo en el envío y recepción de mensajes.

4.- Orden y tolerancia a fallos: Kafka garantiza el orden de los mensajes dentro de una partición y utiliza replicación automática entre brokers para asegurar la alta disponibilidad, incluso ante caídas de nodos. Muchos sistemas de mensajería clásicos no ofrecen un control tan sólido sobre el orden o la durabilidad de los mensajes.

5.- Desacoplamiento y flexibilidad del consumo: En Kafka, los consumidores tienen control total sobre su posición en el log y pueden leer mensajes a su propio ritmo, lo que permite múltiples consumidores independientes de un mismo flujo. En cambio, en sistemas como RabbitMQ los mensajes suelen eliminarse una vez entregados, lo que limita las posibilidades de reprocesamiento o análisis histórico.

Algunas desventajas de Apache Kafka, de forma resumida y concreta, son:

1.- Curva de aprendizaje alta: su arquitectura distribuida y conceptos como offsets, partitions o consumer groups pueden ser complejos para principiantes.

2.- Administración complicada: requiere una configuración y monitoreo cuidadosos; mantener un clúster en producción demanda experiencia en sistemas distribuidos.

3-. Uso intensivo de recursos: consume bastante memoria, CPU y almacenamiento, especialmente con grandes volúmenes de datos o políticas de retención prolongadas.

4.- Latencia variable: aunque es muy rápido, no siempre garantiza latencia ultrabaja o entrega inmediata, sobre todo en entornos con mucha replicación o congestión.

5.- Falta de soporte nativo para mensajes prioritarios o retrasados: Kafka no gestiona prioridades ni programaciones de entrega como algunos message brokers tradicionales.

6.- Dificultad para transacciones complejas: aunque ofrece soporte de transacciones, su configuración y uso pueden ser complicados y costosos en rendimiento.




domingo, 5 de octubre de 2025

Patrones de Despliegue

Un patrón de despliegue es una estrategia estructurada para actualizar o liberar nuevas versiones de software en un entorno de producción, minimizando riesgos, interrupciones y errores.

Blue-Green Deployment

Este patrón mantiene dos entornos idénticos: el actual en producción (blue) y el nuevo (green). El tráfico se redirige al entorno green una vez que el nuevo código pasa todas las pruebas. Si algo falla, basta con redirigir de nuevo al blue.

- Ventajas: despliegues rápidos y reversibles, cero tiempo de inactividad y rollback casi inmediato.

- Desventajas: requiere duplicar recursos (infraestructura y bases de datos) y una gestión cuidadosa de los datos para mantener sincronía entre entornos.

Canary

Consiste en lanzar la nueva versión solo a un porcentaje reducido de usuarios (por ejemplo, 5%), monitorizar el comportamiento (errores, latencia, métricas de negocio) y, si todo va bien, aumentar progresivamente la exposición hasta llegar al 100%.

- Ventajas: permite detectar errores reales en producción con impacto mínimo, facilita pruebas A/B y reduce riesgos.

- Desventajas: requiere observabilidad avanzada (métricas, logs, alertas), puede ser complejo de automatizar y los usuarios deben elegirse cuidadosamente para representar al conjunto de usuarios.

Rolling

En este enfoque se actualizan las instancias del servicio una por una o en pequeños lotes, mientras el resto sigue atendiendo tráfico. Cuando una nueva instancia está lista, se apaga una antigua.

- Ventajas: evita downtime, no necesita entornos duplicados y es compatible con contenedores y orquestadores como Kubernetes.

- Desventajas: los rollbacks son más lentos y, si hay problemas, puede coexistir código antiguo con nuevo, generando inconsistencias temporales.

Recreate / Big Bang

Se apagan todas las instancias existentes antes de desplegar las nuevas. Es simple y directo, sin coexistencia entre versiones.

- Ventajas: fácil de implementar, sin conflictos entre versiones.

- Desventajas: genera tiempo de inactividad, por lo que no es apto para sistemas que requieren alta disponibilidad.

A/B Testing

En este patrón se ejecutan dos versiones diferentes de la aplicación al mismo tiempo (por ejemplo, v1 y v2), y el tráfico se divide según reglas o perfiles (usuarios, cookies, ubicaciones…). Permite comparar rendimiento, UX o conversión antes de decidir cuál mantener.

- Ventajas: ideal para validar hipótesis de negocio y diseño, permite decisiones basadas en datos reales.

- Desventajas: requiere gestión sofisticada del enrutamiento y la segmentación, y puede introducir inconsistencias si las versiones manipulan los mismos datos.

Shadow / Mirroring

La nueva versión recibe una copia del tráfico real (en paralelo al entorno de producción), pero sus respuestas no afectan al usuario. Se usa solo para observar el comportamiento de la nueva versión bajo carga real.

- Ventajas: no hay riesgo para el usuario, excelente para validar rendimiento y compatibilidad antes del lanzamiento real.

- Desventajas: consume recursos adicionales y puede duplicar tráfico en sistemas con alta carga; además, no detecta errores de interacción real con el usuario.

Feature Toggles / Feature Flags

Las nuevas funcionalidades se despliegan al código de producción, pero se activan o desactivan mediante flags (sin necesidad de nuevos despliegues).

- Ventajas: permite despliegue continuo sin exposición inmediata, facilita pruebas en vivo y rollbacks instantáneos a nivel de feature.

- Desventajas: puede complicar el código con demasiadas condiciones y requiere gobernanza rigurosa para evitar “flag debt” (acumulación de flags sin limpiar).



lunes, 29 de septiembre de 2025

Como agregar código fuente con estilo en Blogger

 El presente es una guía muy simplificada para insertar código fuente con estilo en tu blog de Blogger.

Pasos:

Ir al menú 

Blogger ➜ Tema 

arriba a la derecha tenemos un botón que dice "Crear/Restablecer copia de seguridad". 

Clic en "Descargar Tema".

En la pantalla de Temas, clic en "Editar Html".

En el editor incluimos entre las etiquetas <head> </head>, el siguiente código fuente:

<!--Syntax Highligting-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/go.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/vs.min.css" rel="stylesheet">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<!--FIN Syntax Highligting-->

Básicamente, lo que hemos hecho es incluir las librerías de highlight.js en nuestro Blogger.

Por tanto, ya podemos usarla, es tan sencillo como meter nuestro código fuente entre las etiquetas siguientes:

    
<pre>  
    <code class="html">   
         Nuestro código va aquí  
    </code>  
</pre>

En el atributo "class" de la etiqueta <code> debemos especificar el lenguaje de programación de nuestro code snippet. En nuestro caso era html.

--

Fuente de la información: ambellido.blogspot.com

lunes, 22 de septiembre de 2025

¿Qué es un Data Lake?

Un Data Lake es como un gran lago digital donde puedes guardar todos tus datos en bruto (sin importar el formato) en un solo lugar. No importa si son tablas de una base de datos, archivos CSV, videos, imágenes, logs de aplicaciones o datos en tiempo real: todo se almacena junto, tal cual llega, sin necesidad de ordenarlo primero.

La idea es que no tengas que decidir de entrada cómo estructurar los datos (como sí pasa en una base de datos tradicional). En el lago, guardas todo “crudo” y después, cuando lo necesites, aplicas filtros, análisis o transformaciones.

En palabras sencillas: un Data Lake es un repositorio central y flexible donde una empresa guarda toda su información, sin importar el tipo o formato, para luego poder analizarla, entrenar modelos de IA, hacer reportes o descubrir patrones.



viernes, 19 de septiembre de 2025

IAM: AWS Identity and Access Management

 Descripción general

AWS Identity and Access Management (IAM) es un servicio web que ayuda a controlar de forma segura el acceso a los recursos de AWS. Con IAM, se puede administrar a qué recursos de AWS pueden acceder los usuarios. Se utiliza IAM para controlar quién está autenticado (ha iniciado sesión) y autorizado (tiene permisos) para utilizar recursos. IAM proporciona la infraestructura necesaria para controlar la autenticación y la autorización.

¿Qué soluciona?

Permite gestionar la identidad y el acceso a recursos de AWS de forma segura, granular y centralizada, implementando controles de autorización robustos para usuarios, roles, grupos y servicios.

Soporta MFA, federación, credenciales temporales, roles vinculados a servicios, políticas basadas en atributos (ABAC), y otros mecanismos de seguridad avanzados.

IAM es uno de los servicios más importantes de conocer porque es la primera capa de seguridad en la cuenta, del cual se generan la gran mayoría de políticas de control de acceso.

Conceptos clave

  • Recurso: es cualquier cosa que creas o usas dentro de la nube. Por ejemplo, una máquina virtual (EC2), un bucket de almacenamiento (S3), una base de datos (RDS), una función (Lambda), una red (VPC). ● Usuario: es simplemente una identidad que puede entrar a tu cuenta y usar los recursos de la nube.
  • Rol: Imagina el quirófano de un hospital, solo para entrar necesitas un equipamiento específico. En Aws un rol es ese equipamiento que le permite a los usuarios efectuar acciones específicas. Un rol no tiene credenciales fijas, se “asume” (se toma prestado) y al hacerlo recibes permisos temporales.
  • MFA: significa Multi-Factor Authentication o Autenticación Multi-Factor. Es como ponerle un segundo candado a tu cuenta. Usualmente se usan sistemas de generación de códigos como Google Authenticator para complementar el usuario y contraseña de la cuenta, se suele decir que es recomendable, yo digo que aunque Aws no lo requiere debería ser obligatorio, ya que, es muy importante para asegurar cualquier cuenta.
  • Federación: significa que no necesitas crear un usuario de AWS (IAM) para cadapersona que quiera entrar. En lugar de eso, las personas usan su identidad de otro sistema (Google, Microsoft, tu empresa, etc.) para entrar a AWS.
  • ABAC: política basada en atributos (Attribute-Based Access Control) es una forma de dar permisos usando etiquetas (tags) en lugar de nombres de usuario o roles fijos.

Herramientas / funcionalidades principales

  • Gestión de identidades: usuarios, grupos, roles
  • Políticas JSON detalladas (controles de acceso granulares)
  • MFA (Multi-Factor Authentication)
  • Credenciales temporales mediante STS.
  • Federated access (Google, Active Directory, SAML, etc.)
  • Service-linked roles (roles vinculados a servicios)
  • Políticas basadas en atributos (ABAC)
  • IAM Access Advisor (información de uso reciente) y Access Analyzer (análisis de acceso externo, interno, no utilizado, validación de políticas, generación automática)

Alcance

Global: IAM no depende de una región específica. Los usuarios, roles, políticas y grupos creados en IAM son válidos en toda tu cuenta de AWS.

SLA (Service Level Agreement)

No existe un SLA financiero ni de disponibilidad específico para el servicio IAM general (usuarios, roles, políticas).

Aspectos clave de Pricing

  • IAM básico (usuarios, roles, políticas, grupos, MFA, federación, STS, SSO, etc.): gratuito, sin cargos adicionales .
  • IAM Access Analyzer (característica avanzada de IAM):
    • Analizador externo: gratuito
    • Analizador interno: pago por recurso monitoreado / mes
    • Analizador de acceso no utilizado: pago $0.20 por rol o usuario IAM por mes
    • Comprobaciones personalizadas de políticas: $0.0020 por llamada a API (check)

Buenas prácticas y consideraciones

  • Implementar principio de menor privilegio (least privilege), por ejemplo usando Access Analyzer para refinar permisos.
  • Mantener roles y usuarios inactivos desactivados o eliminados por razones de seguridad.
  • Utilizar tags y ABAC para automatización y escalado eficiente de permisos.
  • Para control de costos por usuario, se recomienda usar cuentas separadas dentro de AWS Organizations y etiquetado con CUR (Cost and Usage Reports)

Servicios relacionados

  • AWS Security Token Service (STS)
  • AWS Organizations (para federación y políticas a nivel de organización)
  • AWS CloudTrail (registro de eventos y auditoria)
  • Reachability Analyzer (usa service-linked roles)

Limitaciones relevantes

  • No existe un SLA financiero ni garantía de uptime; en caso de problemas, no hay créditos automáticos como en otros servicios.
  • Access Advisor tiene cobertura limitada y no detecta uso excesivo de acciones específicas; Access Analyzer es la solución más robusta

  • Gestión de costos por usuario dentro de la misma cuenta es limitada; se recomienda arquitectura multi-cuenta.

Documentación oficial

https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/introduction.html

--





jueves, 18 de septiembre de 2025

[Solucionado] ssh_exchange_identification: Connection closed by remote host

 Problema: Me intenté conectar a un servidor a través de ssh y me dió el siguiente error:

ssh_exchange_identification: Connection closed by remote host

Causa: El archivo /etc/hosts.deny es una especie de lista negra en la cual están almacenadas direcciones IP a la que no se le permite acceso al servidor. Mi IP está en esa lista negra.

Solución: Acceder al servidor a través de otra máquina, en persona, proxy o de cualquier otra manera siempre y cuando pueda editar ese archivo con privilegios elevados y eliminar de la lista de IPs «rechazadas» la de nuestra máquina. Eso está en el archivo «/etc/hosts.deny»

También aplica agregar los hosts (IPs) con acceso al server al archivo «hosts.allow».

sshd: 192.168.0.100

Eso basta 🙂 Ya no estamos en la blackList.

miércoles, 17 de septiembre de 2025

Evitar un potencial NullPointerException en Java en comparaciones de String

 A continuación un pequeño tip para evitar un potencial NullPointerException, una de las excepciones más comunes al momento de desarrollar en Java, además una de las más difíciles de rastrear.

Imaginemos que tenemos una clase Llama, tiene una función que devuelve un String llamada saySomething(), ahora supongamos que queremos saber si la llama dice «Ola k ase?»

A manera de ejercicio mental… ¿Cómo desarrollarías la comparación?

El modo más común a primera vista sería:

Llama.saySomething().equals(«Ola k ase?»)

Ejemplo:

    
if (Llama.saySomething().equals("Ola k ase?"))
{
   System.out.println("La llama está saludando");
}
else
{
   System.out.println("La llama no está saludando");
}

Si la clase Llama es nula o Llama.saySomething() devuelve null, se generará un NullPointerException… Pero con un pequeño cambio podemos evitar dicha excepción, de la siguiente manera:

if ("Ola k ase?".equals(Llama.saySomething()))
{
   System.out.println("La llama está saludando");
}
else
{
   System.out.println("La llama no está saludando");
}

En este caso de prueba sí Llama.saySomething() es null no se generará una excepción sino que simplemente se ejecuta el código en el else.

Conceptos básicos de Apache Kafka

Apache Kafka es una plataforma distribuida de mensajería y streaming diseñada para manejar grandes volúmenes de datos en tiempo real. Desar...