Semântica de entrega de mensagem Kafka

Algum nome

Estou lendo a documentação do Kafka sobre consumidores e enfrentei a seguinte definição de consumo de mensagem:

Nosso tópico é dividido em um conjunto de partições totalmente ordenadas, cada uma das quais é consumida por exatamente um consumidor dentro de cada grupo de consumidores assinantes a qualquer momento. Isso significa que a posição de um consumidor em cada partição é apenas um único inteiro, o deslocamento da próxima mensagem a ser consumida.

Eu interpretei o texto da seguinte forma:

Um grupo de consumidores lê dados de um tópico que consiste em várias partições. Em seguida, cada consumidor do grupo é atribuído a algum subconjunto de partições que não se sobrepõe a outras partições de consumidor do grupo.


Considere o seguinte caso:

Um grupo de consumidores que GRPconsiste em 2 consumidores C1e C2lê dados de um tópico que TPCconsiste em 2 partições P1e P2.

PERGUNTA: Se em algum ponto C1P1e C2lê, P2ele pode ser reequilibrado para que C1comece a ler de P2e C2de P1. Em caso afirmativo, em que condições isso pode acontecer?

Isso não contradiz a citação acima.

Mike

Vejo algumas coisas a serem discutidas em sua pergunta e comentário.

  1. Sua interpretação do parágrafo citado está correta.

  2. Pergunta "Em caso afirmativo, em que condições isso pode acontecer?": Sim, este cenário pode acontecer. Uma mudança na atribuição de um consumidor a um TopicPartition é acionada principalmente por meio de um rebalanceamento. Um reequilíbrio do consumidor será acionado nos seguintes casos:

Os reequilíbrios do consumidor são iniciados quando

  • Um Consumidor deixa o grupo Consumidor (por não enviar uma pulsação oportuna ou por solicitar explicitamente para sair)

  • Um novo consumidor se junta ao Grupo de Consumidores

  • Um consumidor muda sua assinatura de tópico

  • O Grupo de Consumidores nota uma mudança nos metadados do Tópico para qualquer Tópico subscrito (por exemplo, um aumento no número de Partições)

[Fonte: Material de Treinamento do Desenvolvedor Confluent Kafka]

Lembre-se de que durante um Rebalance todos os consumidores são pausados.

  1. Seu comentário "C1 leu alguma mensagem de P1 sem confirmar o deslocamento. Então ele perde a conexão com o Kafka e processa a mensagem com sucesso. Ao mesmo tempo, o outro consumidor C3 é criado e atribuído ao P1 lendo a mesma mensagem."

Vejo este cenário não relacionado a um reequilíbrio do consumidor, já que seu consumidor C1 poderia simplesmente morrer após o processamento dos dados, mas antes de enviar a devolução para Kafka. Agora, se você reiniciar o consumidor C1, ele lerá as mesmas mensagens novamente porque ainda não as confirmou.

Isso é chamado de semântica de entrega "pelo menos uma vez" e é diferente da semântica "pelo menos uma vez" quando você, por exemplo, auto.commit ativado. Eu acho que você está procurando pelo "Santo Graal" em sistemas distribuídos que é "exatamente uma vez semântica" :)

Para que isso seja alcançado, você precisa considerar todo o aplicativo, desde o Kafka até o coletor de seu aplicativo. Se a saída de seu aplicativo não for idempotente, você provavelmente não conseguirá obter a semântica exata (EOS). Mas se o seu coletor de saída, por exemplo, for Kafka novamente, você realmente pode obter EOS.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Semântica de entrega do Kafka Stream para um encaminhador simples

Entrega de mensagem ordenada SCTP

Kafka streams confirma semântica de deslocamento

Por que o Spring Integration QueueChannel é executado sequencialmente com a mensagem de entrega atrasada no kafka

node rd kafka repete relatórios de entrega desde o início para cada mensagem

Kafka - Produtor idempotente na semântica "entrega exatamente uma vez"

O lado do produtor de semântica exata de Kafka

Garantia de entrega de mensagem do aplicativo ServiceFabric nodejs

SQS aciona Lambda na entrega de atraso de mensagem individual

Akka: Tentando entender a ordem de entrega da mensagem entre Atores

Como identificar a mensagem em uma notificação de entrega?

Mensagem de erro de entrada semântica dentro do rótulo

akka e os benefícios da semântica de mensagem no máximo uma vez

Por que o tempo de entrega da mensagem Elixir é proporcional ao tamanho da mensagem?

Spring Kafka e garantia de entrega exatamente uma vez

A semântica de TessBaseAPI :: Clear ()

A semântica de TessBaseAPI :: Clear ()

API Semântica de Scalameta

Compreender a semântica de nivelar

Semântica restrita de C ++

Semântica RPC de gRPC

Semântica de volátil

Que tipo de garantia de entrega de mensagem a Aeron pode oferecer?

Entrega de compartilhamento de arquivos de SSRS sem domínio

Data de formatação usando date_i18n para mensagem de entrega WooCommerce

Detectando erro de entrega de mensagem Socket.IO no lado do cliente

Como rastrear a mensagem de entrega da grade de eventos do azure com falha / expirada?

Como faço para atrasar a entrega de uma mensagem JMS usando o HornetQ?

Mensagem de saída do SalesForce do motivo da falha na entrega