Analítica de actualizaciones de contenido en Wikipedia en tiempo real con Spark Streaming
Actualización de Wikipedia
Tipo de Artículos
Lenguajes de Artículos
Lista de Artículos
Información
En este ejemplo el cluster de Kafka se usa como respositorio de datos en tiempo real, lo cual significa que todos los datos que se emitan al cluster se ponen a disposición de los consumidores, y además garantiza la persitencia de los mensajes por un número de días configurable, en este caso 3.
Tiene 3 nodos brokers que gestionan el flujo de mensajes desde y hacia producer y consumer respectivamente.
En esta demostración se ha implementado un producer configurable a través de un fichero .properties de java, para conectarse al stream que emite la wikipedia en tiempo real.
La conexión se realiza usando WebSocket con cliente java, pasando las propiedades específicas de cada fuente, wikipedia, wikimedia o wikidata.
Al recibir los mensajes del stream, se envian al cluster con el topic configurado usando una instancia de la clase org.apache.clients.producer.KafkaProducer , aquí se agregan algunos datos útiles en el posterior procesamiento, como la fecha y el tipo de wiki que emite los datos.
Luego se distribuye este componente por diferentes nodos que, en este caso coinciden con los nodos de los brokers de kafka, pero no es una condicion necesaria, y se ponen en marcha el producer para enviar datos al cluster ininterrupidamente.
Para más información, se puede consultar la entrada en el blog de TodoBI.
Información
El cluster Kafka permanece recibiendo datos de las modificaciones de la wikipedia. Esos datos pueden ser obtenidos usando un org.apache.clients.consumer.KafkaConsumer que se conecte al cluster y a los topics de los se quiere recibir datos.
Spark Streaming permite analizar un conjunto de datos recibidos en tiempo real durante una ventana temporal especificada, en este caso, 4 segundos. En esta demostración, se obtiene la ventana temporal usando el conector de Spark Streaming con Kafka, para luego realizar los análisis sobre los datos.
Se realizan tres operaciones Map Reduce para agrupar y contar las actualizaciones, por tipo, idioma y modalidad, para enviar el resultado de estas operaciones al API Rest de Spring Framework
Se ha implementado un cliente http usando la biblioteca java.net de java, para evitar incluir dependencias externas en el programa Spark.
Se pueden añadir funciones propias que se ejecutan dentro de los pasos Map y Reduce, en este caso se implementó un notificador, que usa el Cliente Http mencionado para enviar datos al API REST, así se logra una flexibilidad muy importante en la solución de problemas diversos.
Para más información, se puede consultar la entrada en el blog de TodoBI.
Información
Al abrirse la página de esta demostración, se solicita una conexión con el end point que provee los datos de la wikipedia, mediante un WebSocket.
En el servidor se crea una conexión con el cliente y mientras esté abierta y no ocurran errores en el envio, el sistema busca los datos de los componentes de "Broadcast Queue". Estos componentes, a su vez, están recibiendo datos del API REST, que les llega a través del Cliente Http implementado y usado por Spark para enviar los resultados.
La implementación de la "Broadcast Queue", permite que todas las conexiones al servidor puedan buscar los datos en la misma cola obteniendo un tiempo óptimo de O(1), (Complejidad Computacional de obtener datos de una Cola de Mensajes) para cada conexión en recibir el mensaje.
A su vez, en su papel de Cola de Mensajes permite que la comunicación entre Spark y el Server Socket sea óptima, en O(1) igualmente sin contar los retrazos por red.
Esta implementación permite que un número muy alto de clientes puedan conectarse a visualizar en tiempo real los datos recibidos de la wikipedia.
Para más información, se puede consultar la entrada en el blog de TodoBI.