Vamos levá-los em ordem :)
1 - Quando um produtor está produzindo uma mensagem - Ele especifica o tópico para o qual deseja enviar a mensagem, certo? Importa-se com partições?
Por padrão, o produtor não se importa com o particionamento. Você tem a opção de usar um particionador personalizado para ter um controle melhor, mas é totalmente opcional.
2 - Quando um assinante está em execução - Especifica seu ID de grupo para que possa fazer parte de um cluster de consumidores do mesmo tópico ou de vários tópicos nos quais esse grupo de consumidores está interessado?
Sim, os consumidores ingressam (ou criam se estiverem sozinhos) em um grupo de consumidores para compartilhar a carga. Dois consumidores no mesmo grupo nunca receberão a mesma mensagem.
3 - Cada grupo de consumidores possui uma partição correspondente no broker ou cada consumidor possui uma?
Nem. Todos os consumidores de um grupo de consumidores recebem um conjunto de partições, sob duas condições: não há dois consumidores no mesmo grupo com nenhuma partição em comum - e o grupo de consumidores como um todo recebe todas as partições existentes.
4 - As partições criadas pelo corretor não são, portanto, uma preocupação para os consumidores?
Eles não são, mas você pode ver no 3 que é totalmente inútil ter mais consumidores do que as partições existentes, por isso é seu nível máximo de paralelismo para consumir.
5 - Como se trata de uma fila com deslocamento para cada partição, é responsabilidade do consumidor especificar quais mensagens ele deseja ler? Precisa salvar seu estado?
Sim, os consumidores salvam um deslocamento por tópico por partição. Isso é totalmente tratado por Kafka, não se preocupe.
6 - O que acontece quando uma mensagem é excluída da fila? - Por exemplo: a retenção foi de 3 horas e, em seguida, o tempo passa, como o deslocamento está sendo tratado nos dois lados?
Se um consumidor solicitar um deslocamento não disponível para uma partição nos intermediários (por exemplo, devido à exclusão), ele entra no modo de erro e, por fim, redefine-se para essa partição para a mensagem mais recente ou mais antiga disponível (dependendo da o valor de configuração auto.offset.reset) e continue trabalhando.