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.