f?:@'.$&2& %g&1'210*%a'*5% h&$02'$$%!5&102$%!,ij ·...

6
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Upload: others

Post on 21-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Entra en Adictos a través de

Entrar

E-­mail

Contraseña

RegistrarmeOlvidé mi contraseña

Inicio Quiénes somos Formación Comparador de salarios Nuestros libros Más

» Estás en: Inicio Tutoriales Primeros pasos con Apache Kafka

Síguenos a través

de:

Catálogo de servicios

Autentia

Últimas Noticias

» Curso JBoss de Red Hat

» Si eres el responsable o lídertécnico, considératedesafortunado. No puedesculpar a nadie por ser gris

» Portales, gestores decontenidos documentales ydesarrollos a medida

» Comentando el libro Start-­upNation, La historia del milagroeconómico de Israel, de DanSenor & Salu Singer

» Screencasts deprogramación narrados enEspañol

Histórico de noticias

Últimos Tutoriales

» Solución de problemascomunes con la integración demaven en Eclipse Luna.

» Integración de SonarQubeen Eclipse.

» Monitorización de ApacheTomcat con psi-­probe.

» Trident, un compañero deviaje para tratar con Storm

» Cómo se trabaja con un

Ver todos los tutoriales del autor

Juan Alonso Ramos

Consultor tecnológico de desarrollo de proyectos informáticos.

Ingeniero en Informática, especialidad en Ingeniería del Software

Puedes encontrarme en Autentia: Ofrecemos de servicios soporte a desarrollo, factoría yformación

Somos expertos en Java/J2EE

Fecha de publicación del tutorial: 2014-­10-­13 Tutorial visitado 18 veces Descargar en PDF

Primeros pasos con Apache Kafka

0. Índice de contenidos.

1. Introducción.2. Entorno.3. Instalación.4. Producer.5. Consumer.6. KafkaLog4jAppender.7. Referencias.8. Conclusiones.

1. Introducción.

Apache Kafka es un sistema de almacenamiento publicador/subscriptor distribuido, particionado y replicado. Estascaracterísticas, añadidas a que es muy rápido en lecturas y escrituras lo convierten en una herramienta excelente paracomunicar streams de información que se generan a gran velocidad y que deben ser gestionados por uno o variasaplicaciones. Se destacan las siguientes características:

Funciona como un servicio de mensajería, categoriza los mensajes en topics.Los procesos que publican se denominan brokers y los subscriptores son los consumidores de los topics.Utiliza un protocolo propio basado en TCP y Apache Zookeeper para almacenar el estado de los brokers. Cada brokermantiene un conjunto de particiones (primaria y secundaria) de cada topic.Se pueden programar productores/consumidores en diferentes lenguajes: Java, Scala, Python, Ruby, C++ ...Escalable y tolerante a fallos.Se puede utilizar para servicios de mensajería (tipo ActiveMQ o RabbitMQ), procesamiento de streams, web tracking,trazas operacionales, etc.Escrito en Scala.Creado por LinkedIn.

En este tutorial vamos a ver una instalación básica en una máquina, crearemos un productor y un consumidor de topics yconfiguraremos un appender de logs propio de Kafka que podría servirnos para un sistema de trazas operacionales.

Puedes descargarte el código del tutorial desde aquí.

2. Entorno.

El tutorial se ha realizado con el siguiente entorno:

MacBook Pro 15' (2.4 GHz Intel Core i5, 8GB DDR3 SDRAM).

G E T A H E A D W I T H W S O 2 .Learn About the Latest IT Trends to Make Your Business Profitable!

Croma y para qué sirve

Últimos Tutoriales del

Autor

» Trident, un compañero deviaje para tratar con Storm

» Introducción a Apache Storm

» Primeros pasos con Neo4j

» Testing de Hadoop conMRUnit

» Introducción a Spring DataHadoop

Categorías del Tutorial

Big Data

Java Estándar

Sistema Operativo: Mac OS Mavericks 10.9.5Oracle Java SDK 1.7.0_60Apache Kafka 0.8.1.1

3. Instalación

Lo primero será descargarnos la última versión desde la página web oficial, actualmente es la 0.8.1.1.

Una vez descomprimido kafka, lo movemos al directorio que más nos guste, por ejemplo a /opt/kafka:

Tendremos que dar permisos de ejecución a los scripts dentro del directorio bin

Kafka necesitar Zookeeper para trabajar. Por defecto con la distribución viene uno para pruebas que arrancar una únicainstancia. Lo arrancamos a través del script de arranque zookeeper-­server-­start.sh

bin/zookeeper-­server-­start.sh config/zookeeper.properties

En otra consola arrancamos el servidor de Kafka:

bin/kafka-­server-­start.sh config/server.properties

Tanto la configuración de zookeeper como de kafka está en el directorio config donde se configuran los puertos de escucha,directorio de almacenamiento por defecto, número de particiones por defecto, etc.

Zookeeper escucha en el puerto 2181 y almacena por defecto los datos en /tmp/zookeeper. Kafka escuha en el puerto 9092.

4. Producer.

Kafka dispone de un API Java para construir productores y consumidores de mensajes. El productor es muy sencillo,únicamente se indica el servidor donde está corriendo Kafka y el topic por el que escribimos los mensajes:

5. Consumer.

Para ver de forma rápida si el producer está escribiendo en el topic indicado y le llega este mensaje a Kafka podemos arrancarun consumer por línea de comandos:

1234

$ tar -­xvf kafka_2.10-­0.8.1.tgz $ mv kafka_2.10-­0.8.1 /opt$ cd /opt$ mv kafka_2_10-­0.8.1 kafka

12

$ cd bin$ sudo chmod +x *

1234567891011

jalonso@MacBook-­Pro-­Juan-­Alonso:/opt/kafka$ bin/zookeeper-­server-­start.sh config/zookeeper[2014-­10-­06 18:23:58,321] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)[2014-­10-­06 18:23:58,343] WARN Either no config or no quorum defined in config, running [2014-­10-­06 18:23:58,530] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)[2014-­10-­06 18:23:58,531] INFO Starting server (org.apache.zookeeper.server.ZooKeeperServerMain)[2014-­10-­06 18:23:58,568] INFO Server environment:zookeeper.version=3.3.3-­1203054, built on 11[2014-­10-­06 18:23:58,568] INFO Server environment:host.name=192.168.1.35 (org.apache.zookeeper.server.ZooKeeperServer)[2014-­10-­06 18:23:58,568] INFO Server environment:java.version=1.7.0_65 (org.apache.zookeeper.server.ZooKeeperServer)[2014-­10-­06 18:23:58,568] INFO Server environment:java.vendor=Oracle Corporation (org.apache.zookeeper.server.ZooKeeperServer)...[2014-­10-­06 18:23:58,711] INFO Snapshotting: 0 (org.apache.zookeeper.server.persistence.FileTxnSnapLog)

12345678910

jalonso@MacBook-­Pro-­Juan-­Alonso:/opt/kafka$ bin/kafka-­server-­start.sh config/server.properties[2014-­10-­06 18:24:46,305] INFO Verifying properties (kafka.utils.VerifiableProperties)[2014-­10-­06 18:24:46,459] INFO Property broker.id is overridden to 0 (kafka.utils.VerifiableProperties)[2014-­10-­06 18:24:46,459] INFO Property log.cleaner.enable is overridden to false (kafka.utils.VerifiableProperties)[2014-­10-­06 18:24:46,459] INFO Property log.dirs is overridden to /tmp/kafka-­logs (kafka.utils.VerifiableProperties)...[2014-­10-­06 18:24:46,555] INFO [Kafka Server 0], starting (kafka.server.KafkaServer)[2014-­10-­06 18:24:46,558] INFO [Kafka Server 0], Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)[2014-­10-­06 18:24:46,575] INFO Starting ZkClient event thread. (org.I0Itec.zkclient.ZkEventThread)...

1234567891011121314151617181920212223242526272829303132

package com.autentia.tutoriales;; import java.util.Properties;; import kafka.javaapi.producer.Producer;;import kafka.producer.KeyedMessage;;import kafka.producer.ProducerConfig;; public class KafkaProducer private static final String KAFKA_SERVER = "localhost:9092";; private final Producer<String, String> producer;; public KafkaProducer() final Properties props = new Properties();; props.put("metadata.broker.list", KAFKA_SERVER);; props.put("serializer.class", "kafka.serializer.StringEncoder");; producer = new Producer<String, String>(new ProducerConfig(props));; public void send(String topic, String message) producer.send(new KeyedMessage<String, String>(topic, message));; public void close() producer.close();; public static void main(String[] args) new KafkaProducer().send("test", "esto es un test");;

?

?

?

?

?

Ahora vamos a construirnos un Consumer mediante el API que nos proporciona Kafka.

Levantamos el Producer con el mensaje enviado para el topic 'test' y lo que va saliendo por el log del consumer es el mensajeque nos llega por estar suscritos al topic.

Creamos el consumer indicando el host y puerto donde está arrancado el broker. También se configuran parámetros paraindiar un timeout, el tamaño del buffer y un identificador para el consumer.

La gran velocidad en lecturas que tiene Kafka se debe a que los topics se leen a partir de un puntero que marca el offsetdonde empiezan los mensajes. Es responsabilidad del consumer el mantenimiento de este offset.

La salida del consumer por consola devuelve lo mismo que por línea de comandos:

6. KafkaLog4jAppender.

Dada la velocidad con la que se escribe en Kafka, un posible caso de uso sería enviar a Kafka las trazas operacionales denuestra aplicación. De esta forma podriamos configurar consumers de logs que fueran procesándolos para detectarproblemas.

Kafka ya dispone de un Log4jAppender que nos hace todo el trabajo del productor de logs, únicamente tendríamos queconfigurarlo en nuestro log4j.properties:

12

$ bin/kafka-­console-­consumer.sh -­-­zookeeper localhost:2181 -­-­topic testesto es un test

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

package com.autentia.tutoriales;; import java.nio.ByteBuffer;;import java.util.HashMap;;import java.util.Map;; import kafka.api.FetchRequest;;import kafka.api.FetchRequestBuilder;;import kafka.api.PartitionOffsetRequestInfo;;import kafka.common.TopicAndPartition;;import kafka.javaapi.FetchResponse;;import kafka.javaapi.OffsetRequest;;import kafka.javaapi.consumer.SimpleConsumer;;import kafka.message.MessageAndOffset;; import org.apache.log4j.Logger;; public class KafkaConsumer private static final Logger log = Logger.getLogger(KafkaConsumer.class);; private static final int FETCH_SIZE = 100000;; private static final int MAX_NUM_OFFSETS = 1;; private static final int BUFFER_SIZE = 64 * 1024;; private static final int TIMEOUT = 100000;; private static final int PARTITION = 1;; private static final int PORT = 9092;; private static final String TOPIC = "test";; private static final String BROKER = "localhost";; private static final String CLIENT = "testClient";; private final SimpleConsumer consumer;; public KafkaConsumer() this.consumer = new SimpleConsumer(BROKER, PORT, TIMEOUT, BUFFER_SIZE, CLIENT);; public void run() throws Exception long readOffset = getLastOffset(consumer, kafka.api.OffsetRequest.EarliestTime());; //consumer never stops while (true) final FetchRequest req = new FetchRequestBuilder().clientId(CLIENT).addFetch(TOPIC, PARTITION, readOffset, FETCH_SIZE) .build();; final FetchResponse fetchResponse = consumer.fetch(req);; for (MessageAndOffset messageAndOffset : fetchResponse.messageSet(TOPIC, PARTITION)) long currentOffset = messageAndOffset.offset();; if (currentOffset < readOffset) continue;; readOffset = messageAndOffset.nextOffset();; final ByteBuffer payload = messageAndOffset.message().payload();; final byte[] bytes = new byte[payload.limit()];; payload.get(bytes);; log.info("[" + messageAndOffset.offset() + "]: " + new String(bytes, "UTF-­8" public static long getLastOffset(SimpleConsumer consumer, long whichTime) final TopicAndPartition topicAndPartition = new TopicAndPartition(TOPIC, PARTITION);; final Map<TopicAndPartition, PartitionOffsetRequestInfo> requestInfo = new HashMap<TopicAndPartition, PartitionOffsetRequestInfo>();; requestInfo.put(topicAndPartition, new PartitionOffsetRequestInfo(whichTime, MAX_NUM_OFFSETS));; final OffsetRequest offsetRequest = new OffsetRequest(requestInfo, kafka.api.OffsetRequest.CurrentVersion(), CLIENT);; return consumer.getOffsetsBefore(offsetRequest).offsets(TOPIC, PARTITION)[0];; public static void main(String args[]) try new KafkaConsumer().run();; catch (Exception e) log.error("Error:" + e);;

1 2014-­10-­09 23:55:26,989 INFO com.autentia.tutoriales.KafkaConsumer.run(KafkaConsumer.java:64) -­ [0]: esto es un

?

?

?

Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-­No comercial-­Sin obras derivadas 2.5

PUSH THIS Page Pushers Community Help?

----no clicks

+ + + + + + + +

0 people brought clicks to this page

powered by karmacracy

Share | 0

» Registrate y accede a esta y otras ventajas «

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Si lanzamos la clase KafkaConsumer vemos cómo en el topic 'logs' aparecen los logs de info que envía.

7. Referencias.

http://kafka.apache.org/07/quickstart.htmlhttp://www.slideshare.net/miguno/apache-­kafka-­08-­basic-­training-­verisign

8. Conclusiones.

Son muchos las compañias (LinkedIn, Twitter, Netflix, Square, Spotify, Pinterest, Uber, Tumblr y muchos más) las que utilizanApache Kafka para analizar tráfico de sus aplicaciones, como parte de su infraestructura de procesamiento de datos,monitorización en tiempo real, como bus de eventos, etc.

En próximos tutoriales lo configuraremos para trabajar con Twitter y Storm.

Puedes descargarte el código del tutorial desde aquí.

Espero que te haya sido de ayuda.

Un saludo.

Juan

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

123456789101112131415

log4j.rootLogger=INFO, KAFKA, stdout log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppenderlog4j.appender.KAFKA.layout=org.apache.log4j.PatternLayoutlog4j.appender.KAFKA.layout.ConversionPattern=%-­5p: %c -­ %m%n log4j.appender.KAFKA.Topic=logslog4j.appender.KAFKA.BrokerList=localhost:9092log4j.appender.KAFKA.ProducerType=async log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%-­5p: %c -­ %m%n log4j.logger.com.autentia.tutoriales=INFO

12345

[0]: esto es un testFetching metadata from broker id:0,host:localhost,port:9092 with correlation id 0 for 1 topic(s) Set(logs)Connected to localhost:9092 for producingDisconnecting from localhost:9092Connected to localhost:9092 for producing

More ShareShareShareShareShareShare

?

?

Copyright 2003-­2014 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto