Fluxos para todos
Se você chegou até aqui, significa que você já considerou ou está pensando em usar o streaming de eventos em sua arquitetura de dados para a ampla variedade de benefícios que ele pode oferecer. Ou talvez você esteja procurando algo para apoiar uma iniciativa de malha de dados, porque isso é toda a raiva agora. Em ambos os casos, ambos Amazon Kinesis e Apache Kafka Pode ajudar, mas qual é o ajuste certo para você e seus objetivos. Vamos descobrir!
Isenção de responsabilidade actual, atualmente trabalho na Rockset, mas trabalhei anteriormente na Confluent, uma empresa conhecida por construir plataformas e serviços em nuvem baseados em Kafka. Minha experiência e compreensão de Kafka são muito mais profundas que a cinesia, mas fiz todas as tentativas de fornecer uma comparação imparcial entre os dois para os fins deste artigo.
Software program ou serviço
O Apache Kafka é um software program de código aberto, governado pela Apache Software program Basis e licenciado sob a Apache License versão 2.0. Você pode olhar para o código -fonte, implantá -lo onde quiser e até formar o código -fonte, criar um novo produto e vendê -lo! A Amazon Kinesis é um serviço totalmente gerenciado disponível na AWS. O código -fonte não está disponível e tudo bem, ninguém está julgando o KFC por manter sua receita em segredo. Em termos de estratégias de implantação e gerenciamento de software program, Kafka e Kinesis não poderiam ser mais diferentes. Essa diferença elementary entre software program e serviço os torna interessantes para comparar, já que Kinesis não possui uma alternativa de código aberto verdadeiro e Kafka tem várias opções de serviço gerenciadas por não-AWS, incluindo nuvem AIVEN, Instacluster e Confluent. Isso inevitavelmente faz de Kafka a opção mais flexível entre os dois se hedgendo contra uma arquitetura somente para AWS.
Acessível ou conveniente
Como em muitos projetos de código aberto, Kafka ganhou popularidade ao ser facilmente acessível a um público de engenheiros e desenvolvedores que tinham {hardware} suficiente para resolver seu problema, mas não conseguiu encontrar o software program certo. Por outro lado, Kinesis se tornou um dos principais serviços de streaming nativos da nuvem, amplamente baseados em sua conveniência e baixa barreira à entrada, especialmente para os clientes existentes da AWS. Na maioria das vezes, esses aspectos continuaram para ambas as partes e você pode encontrar muitas variações diferentes de Kafka com um vasto e variado ecossistema. Enquanto Kinesis permanece em terra trancada no ecossistema da AWS, ainda é extremamente fácil de começar e tem um acoplamento apertado com vários serviços importantes da AWS, como S3 e Lambda. Serviços como a Cloud Confluent e a AWS gerenciaram o streaming para Kafka (MSK) são tentativas de aumentar a conveniência de Kafka na nuvem (a nuvem confluente é a opção mais madura), mas em comparação com a cinesia, eles ainda estão em andamento.
Arquiteto ou desenvolvedor
Como em qualquer avaliação, também devemos considerar nosso público. Para um arquiteto que olhava para o quadro geral, Kafka geralmente parece atraente para sua flexibilidade e adoção do setor. A API Kafka é tão difundida até mesmo outros serviços de mensagens nativos da nuvem a adotaram (consulte os hubs de eventos do Azure). Embora, como desenvolvedor, alguém possa ser forçado a uma decisão mais tática que precisa de um resultado bem conhecido que faça de Kinesis uma escolha óbvia. Kinesis também tem um desenvolvedor que API baseada em descanso e várias bibliotecas de clientes específicas do idioma. Kafka também possui muitas bibliotecas específicas de idiomas na comunidade, mas oficialmente suporta Java. Em outras palavras, se você estiver lendo este artigo e precisará tomar uma decisão amanhã, isso pode ser muito cedo para considerar uma plataforma estratégica como a Kafka. Se você já possui uma conta da AWS, pode ter um serviço de streaming de eventos altamente escalável hoje com a Kinesis.
Vasto ou rápido
O desempenho em um contexto de streaming geralmente é sobre duas coisas: latência e taxa de transferência. A latência é a rapidez com que os dados chegam de uma extremidade do tubo para o outro e a taxa de transferência é o quão grande (pense em circunferência) o tubo é. Em geral, Kafka e Kinesis são projetados para cargas de trabalho de baixa e alta rendição e existem muitos exemplos realistas por aí se você quiser procurá-los. Então, ambos são rápidos, mas a diferença actual de desempenho entre os dois vem de um conceito chamado fanout. Desde a sua criação, a Kafka foi projetada para uma fanout muito alta, escreva um evento uma vez e leia muitas e muitas vezes. Kinesis tem a capacidade de abanar mensagens, mas torna muito específico e Limites conhecidos sobre fanout e taxas de consumo. Uma taxa de fanout de 5x ou menos geralmente é aceitável para a cinesia, mas eu procuraria Kafka para qualquer coisa mais alta.
Partições ou fragmentos
Para obter escalabilidade, Kafka e Kinesis dividem os dados em unidades isoladas de paralelismo. Kafka chama essas partições e Kinesis os chama de fragmentos, mas conceitualmente eles são equivalentes em sua natureza para permitir níveis mais altos de desempenho da taxa de transferência. Ambos documentaram os limites em torno do número máximo de partições e fragmentos, mas eles estão mudando com frequência suficiente para que seja mais relevante pensar em números por unidade. Para obter informações sobre a taxa de transferência por partição, precisamos analisar a documentação em nuvem confluentes, pois não há padrão para Kafka. Nesse caso A nuvem confluente fornece A MAX 10MB/S WRITE E MAX 30MB/S LEIA POR partição. Documentação de Kinesis possui um número mais claro, mas menor, por fragmento em 1 MB/s de gravação e 2 MB/s de leitura. Isso não significa inerentemente que as partições são melhores que os fragmentos, mas ao pensar em suas necessidades e custos de capacidade, é importante começar com quantas dessas unidades de paralelismo você precisará para atender aos seus requisitos.
Seguro ou seguro
Kafka e Kinesis possuem recursos de segurança semelhantes, como criptografia TLS, criptografia de disco, ACLs e listas de permitir o cliente. Infelizmente para Kafka, é a falta de aplicação desses recursos que é um prejuízo. A menos que você esteja usando a nuvem confluente, a Kafka tem esses recursos como opções, enquanto a cinesia na maioria das vezes os exige. Isso oferece à Kinesis uma grande vantagem de segurança e, como muitos outros serviços da AWS, ele se integra muito bem aos papéis existentes da AWS IAM, tornando a segurança rápida e indolor. E se você está pensando, bem, eu não preciso de todas essas coisas, porque estou gerenciando o Kafka na minha rede privada, então você precisa parar de ler isso e ler sobre zero confiança. Para aqueles que retornam da atualização do Zero Belief e do resto de nós, o ponto principal é que Kafka e Kinesis podem ser protegidos, mas é cinesis e outros serviços em nuvem gerenciados que são inerentemente mais seguros, pois fazem parte de seu rigor em nuvem.
Resumo
Aqui está uma tabela rápida que resume parte da discussão de cima.
Se você me forçou a escolher entre Kafka ou Kinesis, eu escolheria Kafka todos os dias e duas vezes no domingo. A razão é que, como alguém que é mais arquiteto, estou olhando para o quadro geral. Eu posso estar escolhendo um armazenamento de eventos padrão corporativo, onde preciso separar a escolha do provedor de nuvem da minha escolha para uma API de troca de dados comum. Obviamente, na ausência de serviços gerenciados concorrentes para Kafka e uma conta da AWS existente, eu provavelmente me inclinaria para a Kinesis para melhorar meu tempo para o mercado e reduzir a carga operacional. O contexto da situação é mais importante do que o conjunto de recursos de cada tecnologia. Todo mundo tem uma situação única e interessante e espero com algumas idéias deste artigo, algumas segundas opiniões e experiência prática, você pode tomar uma decisão melhor para você. Eu não acho que você ficará desapontado em ambos os casos, pois ambas as tecnologias resistiram ao teste do tempo, provavelmente apenas para ser substituído por algo totalmente novo que nenhum de nós já ouviu falar (basta perguntar ao JMS).
Rockset é a liderança análise em tempo actual Plataforma criada para a nuvem, fornecendo análises rápidas em dados em tempo actual com eficiência surpreendente. Rockset fornece conectores embutidos a ambos Kafka e Kinesispara que os usuários possam criar análises voltadas para o uso de dados de streaming de maneira rápida e acessível. Saiba mais em rockset.com.