Posts

Showing posts with the label Mensajes

Apache Kafka - IV - Consumidores

Image
Versión en inglés / English version Una aplicación consumidora básica, usando la misma biblioteca que en la parte 3 , podría ser: public class KafkaConsumerApp{ public static void main([]String args) { Properties props = new Properties(); props.put("bootstrap.servers", "BROKER-1:9092, BROKER-2:9093"); props.put("key.deserializer", "org.apache.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.common.serialization.StringDeserializer"); KafkaConsumer myConsumer = new KafkaConsumer(props); myConsumer.subscribe(Arrays.asList("my-topic")); try{ while (true) { ConsumerRecords<String, String> records = myConsumer.poll(100); processRecords(records); } } catch (Exception ex) { ex.printStackTrace(); } finally { myConsumer.c...

Apache Kafka - III - Productores

Versión en inglés / English version Por simplicidad, todos los ejemplos de código del post serán en Java . Sin embargo, es importante considerar que Kafka ofrece bibliotecas cliente en varios otros lenguajes. Volviendo a Java, en un proyecto gestionado por Maven , la dependencia con Kafka puede estar dada por: groupId: org.apache.kafka artifactId: kafka-clients version: 0.10.0.1 (o más reciente) Con la dependencia agregada, para crear un productor, será necesario agregar algunas propiedades básicas al proyecto. Hay muchas, muchas más; se verán las básicas por ahora: Properties props = new Properties(); props.put("bootstrap.servers", "BROKER-1:9092, BROKER-2:9093"); props.put("key.serializer", "org.apache.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.common.serialization.StringSerializer"); La propiedad bootstrap.servers define una lista de brokers del cluste...

Apache Kafka - II - Topics y particiones

Image
Versión en inglés / English version Topics En Kafka, un topic es una colección ordenada de mensajes, con un nombre que lo identifica dentro de un cluster . Los productores envían mensajes a un topic específico, utilizando el nombre del topic para indicarlo. Por su parte, cualquier consumidor de ese mismo cluster puede leer mensajes del topic , indicando también su nombre. Ésta es la visión de un topic como una entidad lógica; la forma en que se almacena y maneja dentro del cluster es irrelevante para productores y consumidores. A ellos sólo les interesa enviar y recibir datos. Los topics de Kafka tienen las siguientes propiedades esenciales: Orden : Los topics en Kafka son una secuencia ordenada de mensajes. Dicho orden está dado por el orden en que los mensajes ingresan al topic , o sea el orden en que son recibidos por el cluster . Inmutabilidad : Una vez que un mensaje ha sido guardado en un topic , no puede ser modificado, ni eliminado: los ...

Apache Kafka - I - Arquitectura y conceptos de alto nivel

Image
Versión en inglés / English version En primer lugar, ¿qué es Apache Kafka ? Una definición inicial sería "un sistema distribuido de mensajería de alto throughput ". Descomponiendo: Alto throughput : Una traducción aproximada de throughput, en el contexto de sistemas informáticos, sería "rendimiento". Sin embargo, es necesario aclarar que cuando se habla de throughput , se está aludiendo concretamente a la cantidad de elementos procesados por unidad de tiempo. Uno de los objetivos principales de Kafka es precisamente procesar la mayor cantidad posible de mensajes por unidades de tiempo, de forma escalable y tolerante a fallas. Por ejemplo, LinkedIn , que es donde se originó Kafka, necesita lograr throughputs del orden de 20 millones de mensajes por segundo, y 3 GB de datos por segundo.. Sistema distribuido de mensajería: En un sistema distribuido genérico, múltiples computadoras en red colaboran con un objetivo en común. En el caso particular de Ka...

C++: Capturar Windows Messages de una aplicación MFC sin usar MFC

Versión en inglés / English version Supongamos que necesitamos que nuestra dll C++ se comunique con una biblioteca externa que use MFC y Windows Messages para enviar datos y notificaciones. La forma más sencilla de establecer esa comunicación sería escribiendo una aplicación MFC con un diálogo (una clase que herede de CDialog) que maneje los mensajes generados por la biblioteca externa. Pero supongamos que nuestra dll C++ está en una capa de bajo nivel y no queremos meter una interfaz de usuario ahí. Al menos, no abiertamente. No hay forma de evitar los Windows Messages, así que tendremos que usar, mínimamente, la API Win32 nativa. Entonces, ¿Cómo capturamos Windows Messages sin mostrar una ventana? Antes de seguir, debemos saber lo siguiente: Para capturar Windows Messages, hay que crear una ventana (asociada a un HWND) y usar su message loop Hay uno y sólo un message loop por thread. Esto implica que la ventana que atrape los mensajes y su message loop deben vivir ...