Kafka es un sistema de mensajería distribuida de alto rendimiento desarrollado por LinkedIn que se utiliza ampliamente en escenarios como la recogida de registros, procesamiento de datos en streaming, distribución de mensajes online y offline, y más. Aunque no está diseñado como un MQ tradicional, Kafaka puede reemplazar a los sistemas de mensajería tradicionales como ActiveMQ en la mayoría de los casos.
Kafka organiza el flujo de mensajes por temas, y el servidor que contiene los mensajes se llama broker, y los consumidores pueden suscribirse a uno o más temas. Para equilibrar la carga, los mensajes de un tema pueden dividirse en múltiples particiones, y cuantas más particiones, mayor será el paralelismo y el rendimiento de Kafka.
Los clústeres Kafka requieren soporte de zookeeper para implementarlos, y zookeeper ya está incluido en la última distribución kafka, que puede desplegarse para iniciar un servidor zookeeper y un servidor Kafka al mismo tiempo, o usar otros clústeres de zookeepers existentes.
A diferencia del MQ tradicional, los consumidores deben mantener un offset por sí mismos y, al recibir mensajes de kafka, solo extraen mensajes después del offset actual. El cliente scala/java de Kafka ya implementa esta parte de la lógica guardando el offset para el cuidador del zoo. Cada consumidor puede elegir un ID, y los consumidores con el mismo ID solo recibirán el mismo mensaje una vez.Si los consumidores de un tema usan todos el mismo id, es una Cola tradicional. Si cada consumidor usa un ID diferente, es un pub-sub tradicional.
Revisión:
Consumo de kafka
1. Consumidores del mismo group_id, solo un consumidor puede consumir mensajes (Modo cola de cola)
2. Los consumidores de diferentes group_id reciben las mismas noticias
Ventajas de Kafka
Distribuido y altamente escalable. Los clústeres Kafka pueden escalarse de forma transparente para añadir nuevos servidores al clúster.
Alto rendimiento. El rendimiento de Kafka supera ampliamente al de implementaciones tradicionales de MQ como ActiveMQ y RabbitMQ, especialmente Kafka, que también soporta operaciones por lotes. La siguiente imagen muestra los resultados de la prueba de estrés de rendimiento del consumidor de LinkedIn:
Tolerancia a fallos. Los datos de cada partición en Kafka se replican a varios servidores. Cuando un intermediario falla, el servicio ZooKeeper notificará al productor y al consumidor, quienes cambian a otro intermediario.
Desventajas de Kafka:
Repite mensajes. Kafka solo garantiza que cada mensaje se entregue al menos una vez, y aunque las probabilidades son bajas, existe la posibilidad de que un mensaje se entregue varias veces. Las noticias están fuera de lugar. Aunque los mensajes dentro de una partición están garantizados como ordenados, si un tema tiene múltiples particiones, la entrega de mensajes entre particiones no garantiza que sea ordenada. Complejidad. Kafka requiere el soporte de grupos de cuidadores, y los temas suelen requerir trabajo manual para crear, desplegar y mantenerse, más costoso que las colas generales de mensajes
.NET/C# cola de mensajes Operaciones de Kafka
Primero, utiliza .NET Core 3.1 para crear dos nuevos proyectos de consola, a saber, Kafka-Consumer y Kafka-Producer
Usa nuget para referenciar el paquete Confluent.Kafka así, con el siguiente comando:
Dirección de GitHub:El inicio de sesión del hipervínculo es visible.
Empezamos primero el programa Productor, y si empezamos primero con el consumidor, obtendremos el siguiente error:
Se ha producido un error: Broker: Tema o partición desconocida Este artículo consumirá los ajustesEnableAutoOffsetStore es falso, es decir, configurar manualmente el almacenamiento de desplazamiento (similar a un mensaje de confirmación manual)
Los consumidores no configuran OffsetStore después de consumirlo
Intenta usar el productor para producir dos mensajes, activa el consumo del consumidor, MaxPollIntervalMs = 10000 // 10 segundos sin ajuste manual, permite que otros clientes consuman, por supuesto, no será consumido por otros clientes en 10 segundos
MaxPollIntervalMs explica
Para los consumidores avanzados, el tiempo máximo permitido para consumir mensajes entre llamadas (por ejemplo, rd_kafka_consumer_poll()). Si se supera este intervalo, se considera que el consumidor ha fallado y el grupo se reequilibra para que la partición se reasigne a otro miembro del grupo de consumidores. Advertencia: Puede que los commits de offset no sean posibles en este momento. Nota: Se recomienda establecer "enable.auto.offset.store=false" para aplicaciones que estén procesando durante mucho tiempo, y luego almacenar explícitamente el desplazamiento (usando offsets_store()) después de que el mensaje esté procesado* para asegurarse de que el desplazamiento no se comprometa automáticamente antes de que el procesamiento se complete. Revisa una vez por segundo a intervalos de dos. Para más información, véase KIP-62. Las representaciones son las siguientes:
OffsetStore se establece después de que el consumidor termina de gastar
código
Después de completar la configuración, espera 10 segundos y seguirá funcionandoRecibido el último mensaje(Cuando el consumidor se conecta con el corredor,Comienza el consumo desde la posición de desplazamientoSi se establece c.Commit(cr); El último mensaje no se recibirá repetidamente.
Ver código fuente
commit el offset + 1, y finalmente llamar a Librdkafka.topic_partition_list_destroy(cOffsets);
El inicio de sesión del hipervínculo es visible.
El inicio de sesión del hipervínculo es visible.
Establece un GroupID diferente
Prueba a establecer un GroupId diferente mediante el parámetro de línea de comandos y luego envía un mensaje a través del productor, como se muestra en la siguiente imagen:
Tanto clinet1 como client2Recibir mensajes históricos, y después de que el productor envíe un mensaje, ambos casi seránRecibir mensajes al mismo tiempo。
Los nuevos consumidores solo reciben mensajes nuevos
¿Cómo haces que un cliente nuevo reciba solo mensajes nuevos e ignore los datos históricos?
La configuración es la siguiente:
Como se muestra a continuación:
Código de productor
Como sigue:
Código de consumo
Como sigue:
Descarga del código fuente
Turistas, si queréis ver el contenido oculto de esta publicación, por favor Respuesta
|