Tomemos esos en orden :)
1 - Cuando un productor produce un mensaje: especificará el tema al que desea enviar el mensaje, ¿es así? ¿Le importan las particiones?
Por defecto, al productor no le importa la partición. Tiene la opción de usar un particionador personalizado para tener un mejor control, pero es totalmente opcional.
2: cuando se ejecuta un suscriptor: ¿especifica su ID de grupo para que pueda formar parte de un grupo de consumidores del mismo tema o de varios temas en los que este grupo de consumidores está interesado?
Sí, los consumidores se unen (o crean si están solos) a un grupo de consumidores para compartir la carga. No dos consumidores en el mismo grupo recibirán el mismo mensaje.
3 - ¿Cada grupo de consumidores tiene una partición correspondiente en el corredor o cada consumidor tiene una?
Ninguno. A todos los consumidores en un grupo de consumidores se les asigna un conjunto de particiones, bajo dos condiciones: no hay dos consumidores en el mismo grupo que tengan una partición en común, y al grupo de consumidores en su conjunto se le asigna cada partición existente.
4 - ¿Son las particiones creadas por el corredor, por lo tanto, no son una preocupación para los consumidores?
No lo son, pero puede ver en 3 que es totalmente inútil tener más consumidores que las particiones existentes, por lo que es su nivel de paralelismo máximo para el consumo.
5 - Dado que esta es una cola con un desplazamiento para cada partición, ¿es responsabilidad del consumidor especificar qué mensajes quiere leer? ¿Necesita salvar su estado?
Sí, los consumidores guardan un desplazamiento por tema por partición. Esto es totalmente manejado por Kafka, no te preocupes por eso.
6 - ¿Qué sucede cuando un mensaje se elimina de la cola? - Por ejemplo: la retención fue de 3 horas, luego pasa el tiempo, ¿cómo se maneja el desplazamiento en ambos lados?
Si un consumidor alguna vez solicita una compensación no disponible para una partición en los intermediarios (por ejemplo, debido a la eliminación), ingresa en un modo de error y finalmente se restablece para esta partición al mensaje más reciente o al más antiguo disponible (dependiendo de el valor de configuración auto.offset.reset) y continúe trabajando.