Un nuevo concursante para destronar al Rey: Apache Pulsar

Un nuevo concursante para destronar al Rey: Apache Pulsar

Apache Kafka parece ser la solución estándar en la arquitectura actual, pero deberíamos centrarnos en si es la elección correcta para nuestras necesidades.

Hoy en día, estamos en una nueva era de Arquitectura Orientada a Eventos, y esta no es la primera vez que vivimos eso. Antes de los microservicios y la nube, EDA era la nueva normalidad en la integración empresarial. Basado en diferentes tipos de estándares, había protocolos como JMS o AMQP utilizados en productos basados en brokers como TIBCO EMS, Active MQ o IBM Websphere MQ, por lo que este enfoque no es algo nuevo.

Con el auge de las arquitecturas de microservicios y el enfoque liderado por API, parecía que habíamos olvidado la importancia de los sistemas de mensajería, y tuvimos que pasar por los mismos desafíos que vimos en el pasado para llegar a una nueva solución de mensajería para resolver ese problema. Así que estamos volviendo a la Arquitectura EDA, mecanismo pub-sub, para ayudarnos a desacoplar los consumidores y productores, moviéndonos de la orquestación a la coreografía, y todos estos conceptos encajan mejor en los mundos actuales con componentes cada vez más independientes que necesitan cooperación e integración.

Durante este esfuerzo, comenzamos a mirar nuevas tecnologías para ayudarnos a implementar eso nuevamente. Sin embargo, con la nueva realidad, olvidamos los protocolos y estándares pesados como JMS y comenzamos a pensar en otras opciones. Y debemos admitir que sentimos que hay un nuevo rey en esta área, y este es uno de los componentes críticos que parece ser, sin importar qué, en la arquitectura de hoy: Apache Kafka.

Y no me malinterpretes. Apache Kafka es fantástico, y ha sido probado durante mucho tiempo, una solución lista para producción, de alto rendimiento, con capacidades impresionantes para la reproducción y una API poderosa para facilitar la integración. Apache Kafka tiene algunos desafíos en este mundo nativo de la nube porque no se lleva tan bien con algunas de sus reglas.

Si has usado Apache Kafka durante algún tiempo, eres consciente de que hay desafíos particulares con él. Apache Kafka tiene una arquitectura que proviene de sus días en LinkedIn en 2011, donde Kubernetes o incluso Docker y las tecnologías de contenedores no eran una cosa, lo que hace que ejecutar Apache Kafka (servicio puramente con estado) de manera contenedorizada sea bastante complicado. Hay mejoras usando gráficos de helm y operadores para facilitar el viaje, pero aún así, no se siente como si las piezas pudieran integrarse bien de esa manera. Otra cosa es la geo-replicación que incluso con componentes como MirrorMaker, no es algo que se use, funcione sin problemas y se sienta integrado.

Otras tecnologías están tratando de proporcionar una solución para esas capacidades, y una de ellas es también otro proyecto de la Fundación Apache que ha sido donado por Yahoo! y se llama Apache Pulsar.

No me malinterpretes; esto no se trata de encontrar una nueva verdad, esa única solución de mensajería que es perfecta para las arquitecturas de hoy: no existe. En el mundo actual, con tantos requisitos y variables diferentes para los diferentes tipos de aplicaciones, una talla única ya no es cierta. Así que deberías dejar de pensar en cuál solución de mensajería es la mejor, y pensar más en cuál sirve mejor a tu arquitectura y cumple con los requisitos tanto técnicos como comerciales.

Hemos cubierto diferentes formas de comunicación general, con varias soluciones específicas para la comunicación sincrónica (tecnologías de malla de servicios y protocolos como REST, GraphQL o gRPC) y diferentes para la comunicación asincrónica. Necesitamos profundizar en la comunicación asincrónica para encontrar lo que funciona mejor para ti. Pero primero, hablemos un poco más sobre Apache Pulsar.

Apache Pulsar

Apache Pulsar, como se mencionó anteriormente, ha sido desarrollado internamente por Yahoo! y donado a la Fundación Apache. Como se indica en su sitio web oficial, hay varios puntos clave a mencionar al comenzar a explorar esta opción:

  • Funciones de Pulsar: Despliega fácilmente lógica de cómputo ligera usando APIs amigables para desarrolladores sin necesidad de ejecutar tu motor de procesamiento de flujos
  • Probado en producción: Apache Pulsar ha funcionado en producción a escala Yahoo durante más de tres años, con millones de mensajes por segundo a través de millones de temas
  • Escalabilidad horizontal: Expande la capacidad sin problemas a cientos de nodos
  • Baja latencia con durabilidad: Diseñado para baja latencia de publicación (< 5ms) a escala con fuertes garantías de durabilidad
  • Geo-replicación: Diseñado para replicación configurable entre centros de datos en múltiples regiones geográficas
  • Multi-tenencia: Construido desde cero como un sistema multi-tenant. Soporta Aislamiento, Autenticación, Autorización y Cuotas
  • Almacenamiento persistente: Almacenamiento persistente de mensajes basado en Apache BookKeeper. Proporciona aislamiento a nivel de IO entre operaciones de escritura y lectura
  • Bibliotecas de clientes: Modelos de mensajería flexibles con APIs de alto nivel para Java, C++, Python y GO
  • Operabilidad: API de administración REST para aprovisionamiento, administración, herramientas y monitoreo. Despliega en metal desnudo o Kubernetes.

Como podemos ver, en su diseño, Apache Pulsar está abordando algunas de las principales debilidades de Apache Kafka como la Geo-replicación y su enfoque nativo de la nube.

Apache Pulsar proporciona soporte para el patrón pub/sub, pero también ofrece muchas capacidades que también lo colocan como un sistema de mensajería de cola tradicional con su concepto de temas exclusivos donde solo uno de los suscriptores recibirá el mensaje. También proporciona conceptos y características interesantes utilizados en otros sistemas de mensajería:

  • Temas de Carta Muerta: Para mensajes que no pudieron ser procesados por el consumidor.
  • Temas Persistentes y No Persistentes: Para decidir si deseas persistir tus mensajes o no durante la transición.
  • Espacios de Nombres: Para tener una distribución lógica de tus temas, de modo que una aplicación pueda agruparse en espacios de nombres como lo hacemos, por ejemplo, en Kubernetes para poder aislar algunas aplicaciones de las otras.
  • Failover: Similar a exclusivo, pero cuando el consumidor adjunto falla al procesar, otro toma la oportunidad de procesar los mensajes.
  • Compartido: Para poder proporcionar un enfoque de round-robin similar al sistema de mensajería de cola tradicional donde todos los suscriptores estarán adjuntos al tema, pero solo uno recibirá el mensaje, y distribuirá la carga entre todos ellos.
  • Suscripciones Multi-tema: Para poder suscribirse a varios temas usando una expresión regular (similar al enfoque de Subject de TIBCO Rendezvous, por ejemplo, en los años 90) que ha sido tan poderoso y popular.

Pero también, si requieres características de Apache Kafka, aún tendrás conceptos similares como temas particionados, temas compartidos por clave, y así sucesivamente. Así que tienes todo a tu disposición para elegir qué tipo de configuración funciona mejor para ti y tus casos de uso específicos, también tienes la opción de mezclar y combinar.

Arquitectura de Apache Pulsar

La Arquitectura de Apache Pulsar es similar a otros sistemas de mensajería comparables hoy en día. Como puedes ver en la imagen a continuación del sitio web de Apache Pulsar, estos son los componentes principales de la arquitectura:

Un nuevo concursante para destronar al Rey: Apache Pulsar
  • Brokers: Uno o más brokers manejan mensajes entrantes de productores, despachan mensajes a consumidores
  • Cluster de BookKeeper para almacenamiento persistente de gestión de mensajes
  • Cluster de ZooKeeper para propósitos de gestión.

Así que puedes ver que esta arquitectura también es bastante similar a la de Apache Kafka nuevamente con la adición de un nuevo concepto del Cluster de BookKeeper.

El Broker en Apache Pulsar son componentes sin estado que principalmente ejecutarán dos piezas

  • Servidor HTTP que expone una API REST para gestión y es utilizado por consumidores y productores para búsqueda de temas.
  • Servidor TCP usando un protocolo binario llamado dispatcher que se utiliza para todas las transferencias de datos. Por lo general, los mensajes se despachan desde un caché de libro mayor gestionado por razones de rendimiento. Pero también si este caché crece demasiado, interactuará con el cluster de BookKeeper por razones de persistencia.

Para soportar la Replicación Global (Geo-Replicación), los Brokers gestionan replicadores que siguen las entradas publicadas en la región local y las republican en las regiones remotas.

El Cluster de Apache BookKeeper se utiliza como almacenamiento persistente de mensajes. Apache BookKeeper es un sistema de registro de escritura anticipada (WAL) distribuido que gestiona cuándo los mensajes deben ser persistidos. También soporta escalado horizontal basado en la carga y soporte multi-log. No solo los mensajes son persistentes sino también los cursores que son la posición del consumidor para un tema específico (similar al offset en la terminología de Apache Kafka)

Finalmente, el Cluster de Zookeeper se utiliza en el mismo rol que Apache Kafka como un cluster de almacenamiento de configuración de metadatos para todo el sistema.

Hola Mundo usando Apache Pulsar

Veamos cómo podemos crear un caso rápido de «Hola Mundo» usando Apache Pulsar como protocolo, y para hacer eso, vamos a intentar implementarlo de manera nativa en la nube. Así que haremos un cluster de un solo nodo de Apache Pulsar en una instalación de Kubernetes y desplegaremos una aplicación productora usando la tecnología Flogo y una aplicación consumidora usando Go. Algo similar a lo que puedes ver en el diagrama a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar
Diagrama sobre el caso de prueba que estamos haciendo

Y vamos a intentar mantenerlo simple, así que solo usaremos docker puro esta vez. Así que, primero que nada, solo inicia el servidor de Apache Pulsar y para hacer eso usaremos el siguiente comando:

docker run -it -p 6650:6650 -p 8080:8080 --mount source=pulsardata,target=/pulsar/data --mount source=pulsarconf,target=/pulsar/conf apachepulsar/pulsar:2.5.1   bin/pulsar standalone

Y veremos una salida similar a esta:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora, necesitamos crear aplicaciones simples, y para eso, se utilizarán Flogo y Go.

Comencemos con el productor, y en este caso, usaremos la versión de código abierto para crear una aplicación rápida.

Primero que nada, solo usaremos la interfaz web (dockerizada) para hacer eso. Ejecuta el comando:

docker run -it -p 3303:3303 flogo/flogo-docker eula-accept

E instalamos una nueva contribución para habilitar la actividad del publicador de Pulsar. Para hacer eso, haremos clic en el botón «Instalar nueva contribución» y proporcionaremos la siguiente URL:

flogo install github.com/mmussett/flogo-components/activity/pulsar

Y ahora crearemos un flujo simple como puedes ver en la imagen a continuación:

Un nuevo concursante para destronar al Rey: Apache Pulsar

Ahora construiremos la aplicación usando el menú, ¡y eso es todo!

Un nuevo concursante para destronar al Rey: Apache Pulsar

Para poder ejecutar, solo lanza la aplicación como puedes ver aquí:

./sample-app_linux_amd64

Ahora, solo necesitamos crear el consumidor en Go-lang para poder hacer eso necesitamos instalar el paquete golang:

go get github.com/apache/pulsar-client-go/pulsar

Y ahora necesitamos crear el siguiente código:

package main
import (
 “fmt”
 “log”
 “github.com/apache/pulsar-client-go/pulsar”
)
func main() {
 client, err := pulsar.NewClient(pulsar.ClientOptions{URL: “pulsar://localhost:6650”})
 if err != nil {
 log.Fatal(err)
 }
defer client.Close()
channel := make(chan pulsar.ConsumerMessage, 100)
options := pulsar.ConsumerOptions{
 Topic: “counter”,
 SubscriptionName: “my-subscription”,
 Type: pulsar.Shared,
 }
options.MessageChannel = channel
consumer, err := client.Subscribe(options)
 if err != nil {
 log.Fatal(err)
 }
defer consumer.Close()
// Recibe mensajes del canal. El canal devuelve una estructura que contiene el mensaje y el consumidor de donde
 // se recibió el mensaje. No es necesario aquí ya que tenemos un solo consumidor, pero el canal podría ser
 // compartido entre múltiples consumidores también
 for cm := range channel {
 msg := cm.Message
 fmt.Printf(“Mensaje recibido msgId: %v — contenido: ‘%s’n”,
 msg.ID(), string(msg.Payload()))
consumer.Ack(msg)
}
}

Y después de ejecutar ambos programas, puedes ver la siguiente salida como puedes ver, pudimos comunicar ambas aplicaciones en un flujo sin esfuerzo.

Un nuevo concursante para destronar al Rey: Apache Pulsar

Este artículo es solo un punto de partida, y continuaremos hablando sobre cómo usar Apache Pulsar en tus arquitecturas. Si deseas echar un vistazo al código que hemos utilizado en este ejemplo, puedes encontrarlo aquí:

¡Bienvenido a la Revolución AsyncAPI!

¡Bienvenido a la Revolución AsyncAPI!

Estamos viviendo en una era donde las tecnologías están cambiando estándares todo el tiempo. Olvidas leer Medium/Stackoverflow/Reddit y descubres que hay al menos cinco (5) nuevos estándares de la industria que están reemplazando a los existentes que conoces (aquellos que han sido lanzados hace algo así como un año 🙂 ).

¿Todavía recuerdas los viejos tiempos cuando SOAP era el formato imbatible? ¿Cuánto tiempo pasamos construyendo nuestros Servicios SOAP en nuestras empresas? REST lo reemplazó como el nuevo estándar… pero solo unos pocos años y estamos de vuelta en una nueva batalla solo por la comunicación sincrónica: gRPC, GraphQL, están aquí para conquistar todo de nuevo. Es una locura, ¿eh?

Pero la situación es similar para la comunicación asincrónica. La comunicación asincrónica ha estado aquí por mucho tiempo. Incluso, mucho antes de que los términos Arquitectura Orientada a Eventos o Streaming fueran realmente un término «cool» o algo de lo que estuvieras al tanto.

Hemos estado usando estos patrones durante tanto tiempo en nuestras empresas. Las grandes empresas han estado usando este modelo en sus integraciones empresariales durante mucho tiempo. Protocolos y tecnologías basados en Pub/Sub como TIBCO Rendezvous se han estado usando desde finales de los 90, y luego también incorporamos enfoques más estándar como JMS usando diferentes tipos de servidores para tener todas estas comunicaciones basadas en eventos.

Pero ahora con la revolución nativa de la nube, la necesidad de computación distribuida, más agilidad, más escalabilidad, las soluciones centralizadas ya no son válidas, y hemos visto una explosión en el número de opciones para comunicarse basadas en estos patrones.

Podrías pensar que esta es la misma situación que estábamos discutiendo al principio de este artículo con respecto a la predominancia de REST y las nuevas tecnologías de vanguardia tratando de reemplazarlo, pero esto es algo bastante diferente. Porque la experiencia nos ha dicho que una sola talla no sirve para todos.

No puedes encontrar una sola tecnología o componente que pueda proporcionar todas las necesidades de comunicación que necesitas para todos tus casos de uso. Puedes nombrar cualquier tecnología o protocolo que desees: Kafka, Pulsar, JMS, MQTT, AMQP, Thrift, FTL, y así sucesivamente.

Piense en cada uno de ellos y probablemente encontrará algunos casos de uso en los que una tecnología funciona mejor que las otras, por lo que no tiene sentido tratar de encontrar una solución tecnológica única para cubrir todas las necesidades. Lo que se necesita es más un enfoque políglota cuando tienes diferentes tecnologías que funcionan bien juntas y usas la que mejor funciona para tu caso de uso (el enfoque de la herramienta adecuada para el trabajo adecuado) como estamos haciendo para las diferentes tecnologías que estamos desplegando en nuestro clúster.

Probablemente no vamos a usar la misma tecnología para hacer un Microservicio basado en Aprendizaje Automático, que una Aplicación de Streaming, ¿verdad? El mismo principio se aplica aquí.

Pero el problema aquí cuando intentamos hablar sobre diferentes tecnologías trabajando juntas es sobre la estandarización. Si pensamos en REST, gRPC o GraphQL, aunque son diferentes, juegan basados en algunos fundamentos comunes. Se basan en el mismo protocolo HTTP para un estándar, por lo que es fácil soportar todos ellos en la misma arquitectura.

Pero esto no es cierto con las tecnologías sobre Comunicación Asincrónica. Y me gustaría centrarme en la estandarización y especificación hoy. Y eso es lo que la Iniciativa AsyncAPI está tratando de resolver. Y para definir qué es AsyncAPI me gustaría usar sus propias palabras de su sitio web oficial:

AsyncAPI es una iniciativa de código abierto que busca mejorar el estado actual de las Arquitecturas Orientadas a Eventos (EDA). Nuestro objetivo a largo plazo es hacer que trabajar con EDA sea tan fácil como trabajar con APIs REST. Eso va desde la documentación hasta la generación de código, desde el descubrimiento hasta la gestión de eventos. La mayoría de los procesos que aplicas a tus APIs REST hoy en día también serían aplicables a tus APIs orientadas a eventos/asincrónicas.

Entonces, su objetivo es proporcionar un conjunto de herramientas para tener un mundo mejor en todas esas arquitecturas EDA que todas las empresas tienen o están comenzando a tener en este momento y todo gira en torno a una cosa: La Especificación OpenAPI.

Similar a la especificación OpenAPI, nos permite definir una interfaz común para nuestras Interfaces EDA y la parte más importante es que esto es multicanal. Así que la misma especificación puede ser utilizada para tu API basada en MQTT o tu API de Kafka. Veamos cómo se ve esta Especificación AsyncAPI:

¡Bienvenido a la Revolución AsyncAPI!
Definición AsyncAPI 2.0 (de https://www.asyncapi.com/docs/getting-started/coming-from-openapi/)

Como puedes ver, es muy similar a OpenAPI 3.0 y ya lo han hecho con el propósito de facilitar la transición entre OpenAPI 3.0 y AsyncAPI y también para tratar de unir ambos mundos: Se trata más de solo API, no importa si son sincrónicas o asincrónicas y proporcionar los mismos beneficios con respecto al ecosistema de una a otra.

¡Muéstrame el código!

Pero dejemos de hablar y comencemos a codificar y para hacer eso me gustaría usar una de las herramientas que en mi opinión tiene el mayor soporte para AsyncAPI, y eso es Project Flogo.

Probablemente recuerdes algunas de las diferentes publicaciones que he hecho con respecto a Project Flogo y TIBCO Flogo Enterprise como una gran tecnología para usar en el desarrollo de tus microservicios (enfoque de bajo código/todo código, basado en Golang, muchos conectores y extensiones de código abierto también).

Pero hoy vamos a usarlo para crear nuestro primer microservicio compatible con AsyncAPI. Y vamos a confiar en eso porque proporciona un conjunto de extensiones para apoyar la iniciativa AsyncAPI como puedes ver aquí:

Así que lo primero que vamos a hacer es crear nuestra definición AsyncAPI y para hacerlo más simple, vamos a usar la muestra que tenemos disponible en el OpenAsync API con un simple cambio: Vamos a cambiar del protocolo AMQP al protocolo Kafka porque esto es genial en estos días, ¿no? 😉

asyncapi: '2.0.0'
info:
  title: Aplicación Hola Mundo
  version: '0.1.0'
servers:
  production:
    url: broker.mycompany.com
    protocol: kafka
    description: Este es el broker de "Mi Empresa".
    security:
      - user-password: []
channels:
  hello:
    publish:
      message:
        $ref: '#/components/messages/hello-msg'
  goodbye:
    publish:
      message:
        $ref: '#/components/messages/goodbye-msg'
components:
  messages:
    hello-msg:
      payload:
        type: object
        properties:
          name:
            type: string
          sentAt:
            $ref: '#/components/schemas/sent-at'
    goodbye-msg:
      payload:
        type: object
        properties:
          sentAt:
            $ref: '#/components/schemas/sent-at'
  schemas:
    sent-at:
      type: string
      description: La fecha y hora en que se envió un mensaje.
      format: datetime
  securitySchemes:
    user-password:
      type: userPassword

Como puedes ver, algo simple. Dos operaciones «hello» y «goodbye» con carga útil sencilla:

  • name: Nombre que vamos a usar para el saludo.
  • sentAt: La fecha y hora en que se envió un mensaje.

Así que lo primero que vamos a hacer es crear una Aplicación Flogo que cumpla con esa especificación AsyncAPI:

git clone https://github.com/project-flogo/asyncapi.git
cd asyncapi/
go install

Ahora tenemos el instalador del generador, así que solo necesitamos ejecutar y proporcionar nuestro YML como entrada en el siguiente comando:

asyncapi -input helloworld.yml -type flogodescriptor

Y crearemos una aplicación HelloWorld para nosotros, que necesitamos ajustar un poco. Solo para que puedas estar en funcionamiento rápidamente, solo estoy compartiendo el código en mi repositorio de GitHub que puedes tomar de allí (Pero realmente te animo a que te tomes el tiempo para echar un vistazo al código para ver la belleza del Desarrollo de Aplicaciones Flogo 🙂 )

https://github.com/project-flogo/asyncapi

Ahora, que ya tenemos la aplicación, tenemos solo una aplicación simple que nos permite recibir el mensaje que cumple con la especificación, y en nuestro caso solo registrar la carga útil, lo que puede ser nuestro punto de partida para construir nuestros nuevos Microservicios Orientados a Eventos compatibles con AsyncAPI.

Así que, probémoslo, pero para hacerlo, necesitamos algunas cosas. Primero que nada, necesitamos un servidor Kafka en funcionamiento y para hacerlo de manera rápida vamos a aprovechar el siguiente archivo docker-compose.yml:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper:3.4.6
    expose:
    - "2181"
  kafka:
    image: wurstmeister/kafka:2.11-2.0.0
    depends_on:
    - zookeeper
    ports:
    - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

Y para ejecutar eso solo necesitamos lanzar el siguiente comando desde la misma carpeta donde tenemos este archivo llamado docker-compose.yml:

docker-compose up -d

Y después de hacer eso, solo necesitamos una aplicación de muestra y qué mejor que usar Flogo nuevamente para crearla, pero esta vez, usemos el Visor Gráfico para crearla de inmediato:

¡Bienvenido a la Revolución AsyncAPI!
Aplicación Flogo Simple para enviar un mensaje compatible con AsyncAPI cada minuto usando Kafka como protocolo

Así que solo necesitamos configurar la actividad Publicar Kafka para proporcionar el broker (localhost:9092), el tema (hello) y el mensaje :

{
"name": "hola mundo",
"sentAt": "2020-04-24T00:00:00"
}

¡Y eso es todo! ¡Ejecutémoslo!:

Primero iniciamos el Microservicio Flogo AsyncAPI:

¡Bienvenido a la Revolución AsyncAPI!
¡Microservicios Flogo AsyncAPI Iniciados!

Y luego solo lanzamos el probador, que va a enviar el mismo mensaje cada minuto, como puedes ver en la imagen a continuación:

¡Bienvenido a la Revolución AsyncAPI!
Probador de Muestra enviando mensajes de muestra

Y cada vez que enviamos ese mensaje, va a ser recibido en nuestro Microservicio Flogo AsyncAPI:

¡Bienvenido a la Revolución AsyncAPI!

Así que, espero que esta primera introducción al mundo AsyncAPI haya sido de tu interés, pero no olvides echar un vistazo a más recursos en su propio sitio web:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación

Si estás familiarizado con el mundo de la Integración Empresarial, seguro que conoces Kafka, uno de los proyectos más famosos de la Fundación Apache en los últimos años, y también si estás en el mundo de la Integración conoces TIBCO Software, y algunos de nuestros productos insignia como TIBCO ActiveMatrix BusinessWorks para integración, TIBCO Cloud Integration como nuestro iPaaS, TIBCO AMX BPM, TIBCO BusinessEvents… y podría continuar esa lista una y otra vez.. 🙂

Pero, probablemente no sepas sobre TIBCO(R) Messaging — Apache Kafka Distribution. Esta es una de las partes de nuestra solución de mensajería global llamada TIBCO Messaging y está compuesta por varios componentes:

  • TIBCO Enterprise Message Service (también conocido como TIBCO EMS) es nuestro servidor compatible con JMS 2.0, uno de nuestros estándares de mensajería durante más de una década.
  • TIBCO FTL es nuestra solución de mensajería lista para la nube, utilizando un sistema de comunicación pub-sub directo, no centralizado y muy eficiente.
  • TIBCO(R) Messaging — Apache Kafka Distribution está diseñado para la distribución eficiente de datos y el procesamiento de flujos con la capacidad de conectar aplicaciones Kafka a otras aplicaciones de TIBCO Messaging impulsadas por TIBCO FTL(R), TIBCO eFTL(TM) o TIBCO Enterprise Message Service(TM).
  • TIBCO(R) Messaging — Eclipse Mosquitto Distribution incluye un broker MQTT ligero y una biblioteca C para el cliente MQTT en el paquete Core y un componente para conectar clientes MQTT a aplicaciones TIBCO FTL en el paquete Bridge.

Me gustaría hacer esta publicación completamente técnica, pero voy a dejar un poco de información sobre la versión del producto que podrías encontrar interesante, porque tenemos una Edición Comunitaria de toda esta solución de Mensajería que podrías usar tú mismo.

El software TIBCO Messaging está disponible en una edición comunitaria y una edición empresarial.

TIBCO Messaging — Community Edition es ideal para comenzar con TIBCO Messaging, para implementar proyectos de aplicaciones (incluidos esfuerzos de prueba de concepto) para pruebas, y para desplegar aplicaciones en un entorno de producción. Aunque la licencia comunitaria limita el número de procesos de producción, puedes actualizar fácilmente a la edición empresarial a medida que tu uso de TIBCO Messaging se expande. La edición comunitaria está disponible de forma gratuita, con las siguientes limitaciones y exclusiones:

● Los usuarios pueden ejecutar hasta 100 instancias de aplicaciones o 1000 instancias web/móviles en un entorno de producción.

● Los usuarios no tienen acceso al soporte de TIBCO, pero pueden usar TIBCO Community como recurso (http://community.tibco.com).

TIBCO Messaging — Enterprise Edition es ideal para todos los proyectos de desarrollo de aplicaciones, y para desplegar y gestionar aplicaciones en un entorno de producción empresarial. Incluye todas las características presentadas en este conjunto de documentación, así como acceso al soporte de TIBCO.

Puedes leer esa información aquí, pero, por favor, tómate tu tiempo también para leer nuestro anuncio oficial que puedes encontrar aquí.

Así que, este va a ser el primero de algunos posts sobre cómo integrar Kafka en el ecosistema habitual de TIBCO y diferentes tecnologías. Esta serie va a asumir que ya conoces Apache Kafka, y si no lo haces, por favor, echa un vistazo a la siguiente referencia antes de continuar:

Así que, ahora vamos a comenzar instalando esta distribución en nuestra máquina, en mi caso voy a usar un objetivo basado en UNIX, pero tienes este software disponible para MacOS X, Windows o cualquier sistema operativo que estés usando.

El proceso de instalación es bastante simple porque la distribución se basa en las distribuciones de Linux más habituales, por lo que te proporciona un paquete deb, un paquete rpm o incluso un paquete tar para que puedas usar lo que necesites para tu distribución actual. En mi caso, como estoy usando CentOS, he optado por el paquete rpm y todo va muy bien.

Y después de eso, he instalado en mi carpeta /opt/tibco una distribución de Kafka bastante usual, así que para iniciarla necesitamos iniciar primero el servidor zookeeper y luego el servidor kafka en sí. Y eso es todo. ¡¡Todo está funcionando!!

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Distribución de Apache Kafka en funcionamiento

Mmmm.. Pero, ¿cómo puedo estar seguro de ello? Kafka no proporciona una GUI para monitorear o supervisarlo, pero hay un montón de herramientas por ahí para hacerlo. En mi caso voy a usar Kafka Tool porque no necesita otros componentes como Kafka REST y demás, pero ten en cuenta que hay otras opciones con una interfaz de usuario más «bonita», pero esta va a hacer el trabajo perfectamente.

Así que, después de instalar Kafka Tool, solo proporcionamos los datos de dónde está escuchando zookeeper (si mantienes todo por defecto, va a estar escuchando en el 2181) y la versión de Kafka que estamos usando (en este caso es la 1.1), y ahora puedes estar seguro de que todo está en funcionamiento y trabajando como se espera:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Kafka Tool podría usarse para monitorear tus brokers de Kafka

Así que, ahora vamos a hacer solo una prueba rápida usando nuestro producto de integración insignia TIBCO AMX BusinessWorks que tiene un complemento de Kafka, para que puedas comunicarte con este nuevo servidor que acabamos de lanzar. Esto va a ser solo un Hola Mundo con la siguiente estructura:

  • El Proceso A va a enviar un ¡Hola! al Proceso B.
  • El Proceso B va a recibir ese mensaje y lo imprimirá en un registro.

Los procesos se van a desarrollar de la siguiente manera:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Proceso de Prueba del Remitente de Kafka
Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Proceso de Prueba del Receptor de Kafka

Y este es el resultado que obtenemos después de ejecutar ambos procesos:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
Ejecución correcta usando TIBCO Business Studio

Y podemos ver que el tema de ejemplo que usamos para hacer la comunicación y la partición predeterminada se ha creado por defecto usando Kafka Tool:

Comenzando con TIBCO(R) Messaging — Distribución de Apache Kafka (I) Visión general e instalación
El tema se ha creado bajo demanda

Como puedes ver, es muy fácil y directo tener todo configurado de manera predeterminada. Después de eso, continuamos profundizando en este nuevo componente en el mundo de TIBCO.