No he trabajado mucho en kafka, pero quería crear una canalización de datos en GCE. Así que queríamos saber Kafka vs PUB / Sub. Básicamente, quiero saber cómo se mantiene la coherencia, la disponibilidad y la fiabilidad del mensaje tanto en Kafka como en Pub / sub.
Gracias
Respuestas:
Además de que Google Pub / Sub es administrado por Google y Kafka es de código abierto, la otra diferencia es que Google Pub / Sub es una cola de mensajes (por ejemplo, Rabbit MQ) mientras que Kafka es más un registro de transmisión. No puede "volver a leer" o "reproducir" mensajes con Pubsub. (EDITAR: a partir de febrero de 2019, PUEDE reproducir mensajes y buscar hacia atrás en el tiempo hasta una determinada marca de tiempo, según el comentario a continuación)
Con Google Pub / Sub, una vez que se lee un mensaje de una suscripción y se ACK, desaparece. Para tener más copias de un mensaje para ser leídas por diferentes lectores, "distribuye" el tema creando "suscripciones" para ese tema, donde cada suscripción tendrá una copia completa de todo lo que entra en el tema. Pero esto también aumenta el costo porque Google cobra el uso de Pub / Sub por la cantidad de datos leídos.
Con Kafka, establece un período de retención (creo que es de 7 días por defecto) y los mensajes permanecen en Kafka independientemente de cuántos consumidores lo lean. Puede agregar un nuevo consumidor (también conocido como suscriptor) y hacer que comience a consumir desde el principio del tema en cualquier momento que desee. También puede configurar el período de retención para que sea infinito, y luego básicamente puede usar Kafka como un almacén de datos inmutable, como se describe aquí: http://stackoverflow.com/a/22597637/304262
Amazon AWS Kinesis es una versión administrada de Kafka, mientras que yo pienso en Google Pubsub como una versión administrada de Rabbit MQ. Amazon SNS con SQS también es similar a Google Pubsub (SNS proporciona el despliegue y SQS proporciona la cola).
fuente
He estado leyendo las respuestas anteriores y me gustaría complementarlas, porque creo que hay algunos detalles pendientes:
Sistema completamente administrado Ambos sistemas pueden tener una versión completamente administrada en la nube. Google proporciona Pubsub y existen algunas versiones de Kafka completamente administradas que puede configurar en la nube y en las instalaciones .
Cloud vs On-prem Creo que esta es una diferencia real entre ellos, porque Pubsub solo se ofrece como parte del ecosistema de GCP, mientras que Apache Kafka se puede usar como un servicio en la nube y un servicio local (haciendo la configuración del clúster usted mismo)
Duplicación de mensajes : con Kafka, deberá administrar las compensaciones de los mensajes usted mismo, utilizando un almacenamiento externo, como Apache Zookeeper. De esa manera puede rastrear los mensajes leídos hasta ahora por los Consumidores. Pubsub funciona al reconocer el mensaje, si su código no reconoce el mensaje antes de la fecha límite, el mensaje se envía nuevamente, de esa manera puede evitar mensajes duplicados u otra forma de evitarlo es usar Cloud Dataflow PubsubIO.
Política de retención Tanto Kafka como Pubsub tienen opciones para configurar el tiempo máximo de retención, por defecto, creo que es de 7 días.
Grupo de consumidores frente a suscripciones Tenga cuidado con la forma de leer los mensajes en ambos sistemas. Pubsub usa suscripciones, creas una suscripción y luego comienzas a leer los mensajes de esa suscripción. Una vez que se lee y reconoce un mensaje, el mensaje de esa suscripción desaparece. Kafka utiliza el concepto de "grupo de consumidores" y "partición", cada proceso de consumidor pertenece a un grupo y cuando se lee un mensaje de una partición específica, cualquier otro proceso de consumidor que pertenezca al mismo "grupo de consumidores" no podrá para leer ese mensaje (eso es porque el desplazamiento eventualmente aumentará). Puede ver el desplazamiento como un puntero que le dice a los procesos qué mensaje deben leer.
Creo que no hay una respuesta correcta para su pregunta, realmente dependerá de lo que necesite y de las limitaciones que tenga (a continuación se muestran algunos ejemplos de los escenarios):
Si la solución debe estar en GCP, obviamente use Google Cloud Pubsub. Evitará todos los esfuerzos de configuración o pagará más por un sistema totalmente automatizado que requiere Kafka.
Si la solución debe requerir datos de proceso en modo Streaming, pero también debe admitir el procesamiento por lotes (eventualmente), es una buena idea usar Cloud Dataflow + Pubsub.
Si la solución requiere usar algún procesamiento de Spark, puede explorar Spark Streaming (que puede configurar Kafka para el procesamiento de transmisión)
En general, ambos son sistemas de procesamiento Stream muy sólidos. El punto que marca la gran diferencia es que Pubsub es un servicio en la nube adjunto a GCP, mientras que Apache Kafka se puede usar tanto en la nube como en las instalaciones.
fuente
With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper
=> DownvotingUna gran diferencia entre Kafka y Cloud Pub / Sub es que Cloud Pub / Sub está completamente administrado por usted. No tiene que preocuparse por las máquinas, configurar clústeres, ajustar parámetros, etc., lo que significa que una gran cantidad de trabajo de DevOps se maneja por usted y esto es importante, especialmente cuando necesita escalar.
fuente