Como escrever para os consumidores Kafka - single threaded vs multi threaded

Eu escrevi um único consumidor Kafka (usando o Spring Kafka), que lê de um único tópico e faz parte de um grupo de consumidores. Depois que uma mensagem é consumida, ela executa todas as operações a jusante e passa para o próximo deslocamento da mensagem. Empacotei isso como um arquivo WAR e meu pipeline de implantação envia isso para uma única instância. Usando meu pipeline de implantação, eu poderia potencialmente implantar esse artefato em várias instâncias no meu pool de implantação.

No entanto, não consigo entender o seguinte, quando quero vários consumidores como parte da minha infraestrutura -

Na verdade, posso definir várias instâncias no meu pool de implantação e ter esse WAR em execução em todas essas instâncias. Isso significa que todos estão ouvindo o mesmo tópico, fazem parte do mesmo grupo de consumidores e, na verdade, dividirão as partições entre si. A lógica downstream funcionará como está. Isso funciona perfeitamente bem para o meu caso de uso, no entanto, não tenho certeza, se esta é a abordagem ideal a seguir?

Lendo on-line, me deparei com recursosaqui eaqui, onde as pessoas estão definindo um único encadeamento do consumidor, mas internamente, criando vários encadeamentos de trabalho. Há também exemplos em que poderíamos definir vários encadeamentos do consumidor que fazem a lógica downstream. Pensando nessas abordagens e mapeando-as para ambientes de implantação, conseguimos o mesmo resultado (como minha solução teórica acima), mas com menos número de máquinas.

Pessoalmente, acho que minha solução é simples, escalável, mas pode não ser a ideal, enquanto a segunda abordagem pode ser a ideal, mas queria conhecer suas experiências, sugestões ou outras métricas / restrições que devo considerar? Além disso, estou pensando com a minha solução teórica que eu poderia realmente empregar máquinas simples de esqueleto como consumidor de Kafka.

Embora eu saiba que não publiquei nenhum código, informe-me se precisar mover esta pergunta para outro fórum. Se você precisar de exemplos de código específicos, também posso fornecê-los, mas não acho que sejam importantes no contexto da minha pergunta.

questionAnswers(2)

yourAnswerToTheQuestion