Atualização em 09 de abril de 2018 : hoje em dia você também pode usar o ksqlDB , o banco de dados de streaming de eventos do Kafka, para processar seus dados no Kafka. O ksqlDB é construído sobre a API Streams de Kafka e também vem com suporte de primeira classe para "fluxos" e "tabelas".
qual é a diferença entre API de consumidor e API de streams?
A biblioteca Streams do Kafka ( https://kafka.apache.org/documentation/streams/ ) é construída sobre os clientes produtores e consumidores do Kafka. O Kafka Streams é significativamente mais poderoso e também mais expressivo do que os clientes simples.
É muito mais simples e rápido escrever um aplicativo do mundo real do início ao fim com o Kafka Streams do que com o consumidor comum.
Aqui estão alguns dos recursos da API Kafka Streams, muitos dos quais não são suportados pelo cliente consumidor (exigiria que você mesmo implemente os recursos ausentes, essencialmente reimplementando Kafka Streams).
- Oferece suporte à semântica de processamento exatamente uma vez por meio de transações Kafka (o que significa EOS )
- Suporta processamento com estado tolerante a falhas (bem como sem estado, é claro), incluindo junções de streaming , agregações e janelas . Em outras palavras, ele oferece suporte ao gerenciamento do estado de processamento do seu aplicativo pronto para uso.
- Suportes de processamento em tempo evento assim como o processamento baseado em processamento em tempo e ingestão de tempo . Ele também processa perfeitamente dados fora de ordem .
- Possui suporte de primeira classe para fluxos e tabelas , que é onde o processamento de fluxo encontra os bancos de dados; na prática, a maioria dos aplicativos de processamento de fluxo precisam de ambos os fluxos E tabelas para implementar seus respectivos casos de uso, portanto, se uma tecnologia de processamento de fluxo não tiver nenhuma das duas abstrações (digamos, nenhum suporte para tabelas), você ficará preso ou deverá implementar manualmente essa funcionalidade sozinho (boa sorte com isso...)
- Oferece suporte a consultas interativas (também chamadas de 'estado consultável') para expor os resultados de processamento mais recentes a outros aplicativos e serviços
- É mais expressiva: ele vem com (1) um estilo de programação funcional DSL com operações tais como
map
, filter
, reduce
bem como (2) um estilo imperativo API processador para, por exemplo fazendo processamento de eventos complexos (CEP), e (3) você pode até combinar o DSL e a API do processador.
- Possui seu próprio kit de teste para teste de unidade e integração.
Consulte http://docs.confluent.io/current/streams/introduction.html para uma introdução mais detalhada, mas ainda de alto nível, da API Kafka Streams, que também deve ajudá-lo a compreender as diferenças para o consumidor Kafka de nível inferior cliente.
Além do Kafka Streams, você também pode usar o banco de dados de streaming de eventos ksqlDB para processar seus dados no Kafka. O ksqlDB foi desenvolvido com base no Kafka Streams. Ele oferece suporte essencialmente aos mesmos recursos do Kafka Streams, mas você escreve streaming de SQL em vez de Java ou Scala. Programaticamente, você pode interagir com ksqlDB por meio de uma CLI ou API REST; ele também tem um cliente Java nativo caso você não queira usar REST.
Então, como a API do Kafka Streams é diferente, já que também consome ou produz mensagens para o Kafka?
Sim, a API do Kafka Streams pode tanto ler dados quanto gravar dados no Kafka. Ele suporta transações Kafka, então você pode, por exemplo, ler uma ou mais mensagens de um ou mais tópicos, opcionalmente atualizar o estado de processamento se você precisar e, em seguida, escrever uma ou mais mensagens de saída para um ou mais tópicos - todos como um operação atômica.
e por que isso é necessário, pois podemos escrever nosso próprio aplicativo de consumidor usando a API do consumidor e processá-los conforme necessário ou enviá-los ao Spark a partir do aplicativo de consumidor?
Sim, você poderia escrever seu próprio aplicativo de consumidor - como mencionei, a API Kafka Streams usa o próprio cliente consumidor Kafka (mais o cliente produtor) - mas você teria que implementar manualmente todos os recursos exclusivos que a API Streams fornece . Veja a lista acima para tudo o que você ganha "de graça". Portanto, é uma circunstância bastante rara que um usuário escolha o cliente consumidor simples em vez da biblioteca mais poderosa do Kafka Streams.