¿Estoy evaluando Google Pub / Sub frente a Kafka? [cerrado]

81

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

Naresh
fuente
6
No es exactamente lo que está buscando, pero quizás sería una lectura interesante para usted: el viaje de Spotify a la nube: por qué Spotify migró su sistema de entrega de eventos de Kafka a Google Cloud Pub / Sub
DoiT International

Respuestas:

92

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).

gunit
fuente
5
La reproducción es una característica fundamental en la mayoría de las arquitecturas orientadas a eventos. Además, Kafka agrega un número de secuencia a los mensajes y, por lo tanto, se convierte en la fuente autorizada de secuencia.
Buzz Moschetti
4
La forma de lograr la "reproducción" con un sistema de cola de mensajes como PubSub es distribuir el tema a más suscripciones (es decir, hacer más copias de los mensajes), y cada consumidor consume su propia suscripción a su propio ritmo. Supongo que puede tener una suscripción que solo está diseñada para reproducir cuando la necesite. Para hacer lo mismo con Kafka, crearía un nuevo consumidor y comenzaría a consumir desde el frente (dado que Kafka no hace una copia de los mensajes, solo le da a cada consumidor su propio desplazamiento de "puntero" para realizar un seguimiento de lo que fue ya leído)
gunit
2
Se puede pensar en Kinesis como un servicio administrado que es semánticamente similar a Kafka, pero no es exacto decir que es una "versión administrada de Kafka". Para un "Kafka administrado" real, consulte Confluent Cloud confluent.io/confluent-cloud
Emmett Butler
6
Cloud Pub / Sub agregó recientemente compatibilidad para reproducir mensajes reconocidos previamente. La guía de inicio rápido y la publicación del blog explican cómo usar la función.
Kamal Aboul-Hosn
1
@EmmettButler tiene razón; Kinesis es un producto propio. Incluso si fue impulsado por Kafka, presenta una API completamente diferente. Amazon ofrece Kafka administrado con AWS MSK .
user0000001
13

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.

selknam
fuente
2
Creo que esto puede ser engañoso; A menos que desee escribir su propia biblioteca en el protocolo de cable de Kafka, los clientes existentes ya proporcionan mecanismos configurables para hacer frente a la confirmación de las compensaciones. Además, las compensaciones comprometidas no se guardan en Zookeeper sino en un tema especial "__consumer_offsets" que se replica entre los corredores. Esta es una buena lectura: confluent.io/blog/…
Zoltan
De hecho, realmente no entiendo su declaración sobre el almacenamiento manual de compensaciones: With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper => Downvoting
Fares
12

Una 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.

Mete Atamel
fuente
7
Eso no es realmente una diferencia porque hay varios proveedores que también ofrecen Kafka como un servicio completamente administrado. La diferencia quizás es que Google PubSub solo está disponible como un servicio en Googles Cloud, por lo que no hay una versión local ni un servicio administrado que se ejecuta en otros proveedores de la nube como AWS o Azure.
Hans Jespersen
2
"Google PubSub solo está disponible como un servicio en Googles Cloud" eso es incorrecto ... su aplicación no está vinculada a su implementación en Google App Engine ... puede conectarse y publicar en GooglePub / Sub "desde cualquier cliente siempre que conéctese de forma segura a través de una "cuenta de servicio".
Jeryl Cook
12
@JerylCook Creo que solo quiere decir que no se puede instalar pub / sub de Google en prem
Sinaesthetic