Streamkap é uma plataforma de integração de dados em tempo real especializada em CDC (captura de alterações de dados) em streaming e processamento de streams. Ela é baseada em uma stack escalável e de alto throughput com Apache Kafka, Apache Flink e Debezium, oferecida como um serviço totalmente gerenciado em implantações SaaS ou BYOC (Bring Your Own Cloud).
O Streamkap permite transmitir cada inserção, atualização e exclusão de bancos de dados de origem, como PostgreSQL, MySQL, SQL Server, MongoDB e outros, diretamente para o ClickHouse com latência de milissegundos.
Isso o torna ideal para alimentar dashboards analíticos em tempo real, análises operacionais e modelos de machine learning com dados em tempo real.
Principais recursos
-
CDC de streaming em tempo real: O Streamkap captura alterações diretamente dos logs do seu banco de dados, garantindo que os dados no ClickHouse sejam uma réplica em tempo real da fonte. Processamento de streams simplificado: transforme, enriqueça, roteie, formate e crie embeddings a partir dos dados em tempo real antes de chegarem ao ClickHouse. Com tecnologia Flink, sem nenhuma da complexidade
-
Totalmente gerenciado e escalável: Ele oferece um pipeline pronto para produção e sem necessidade de manutenção, eliminando a necessidade de gerenciar sua própria infraestrutura de Kafka, Flink, Debezium ou schema registry. A plataforma foi projetada para alto throughput e pode escalar linearmente para lidar com bilhões de eventos.
-
Evolução automática de esquema: O Streamkap detecta automaticamente alterações de esquema no banco de dados de origem e as propaga para o ClickHouse. Ele consegue adicionar novas colunas ou alterar tipos de coluna sem intervenção manual.
-
Otimizado para ClickHouse: A integração foi desenvolvida para funcionar com eficiência com os recursos do ClickHouse. Por padrão, ela usa o engine ReplacingMergeTree para lidar perfeitamente com atualizações e exclusões do sistema de origem.
-
Entrega resiliente: A plataforma oferece garantia de entrega de pelo menos uma vez, assegurando a consistência dos dados entre sua fonte e o ClickHouse. Para operações de upsert, ela realiza desduplicação com base na chave primária.
Primeiros passos
Este guia oferece uma visão geral de como configurar um pipeline do Streamkap para carregar dados no ClickHouse.
Pré-requisitos
- Uma conta do Streamkap.
- Os detalhes de conexão do seu cluster ClickHouse: Hostname, Port, Username e Password.
- Um banco de dados de origem (por exemplo, PostgreSQL, SQL Server) configurado para permitir CDC. Você pode encontrar guias de configuração detalhados na documentação do Streamkap.
Configure a origem no Streamkap
- Faça login na sua conta do Streamkap.
- Na barra lateral, navegue até Connectors e selecione a guia Sources.
- Clique em + Add e selecione o tipo do seu banco de dados de origem (por exemplo, SQL Server RDS).
- Preencha os detalhes da conexão, incluindo o endpoint, a porta, o nome do banco de dados e as credenciais do usuário.
- Salve o connector.
Configure o destino do ClickHouse
- Na seção Connectors, selecione a guia Destinations.
- Clique em + Add e escolha ClickHouse na lista.
- Insira os detalhes da conexão do seu serviço ClickHouse:
- Hostname: O host da sua instância do ClickHouse (por exemplo,
abc123.us-west-2.aws.clickhouse.cloud) - Port: A porta HTTPS segura, normalmente
8443 - Username and Password: As credenciais do seu usuário do ClickHouse
- Database: O nome do banco de dados de destino no ClickHouse
- Hostname: O host da sua instância do ClickHouse (por exemplo,
- Salve o destino.
Crie e execute o pipeline
- Navegue até Pipelines na barra lateral e clique em + Create.
- Selecione a origem e o destino que você acabou de configurar.
- Escolha os schemas e as tables que deseja transmitir via streaming.
- Dê um nome ao seu pipeline e clique em Save.
Depois de criado, o pipeline ficará ativo. O Streamkap primeiro fará um snapshot dos dados existentes e depois começará a transmitir, via streaming, todas as novas alterações à medida que ocorrerem.
Verifique os dados no ClickHouse
Conecte-se ao seu cluster ClickHouse e execute uma consulta para ver os dados chegando à tabela de destino.
SELECT * FROM your_table_name LIMIT 10;Como funciona com o ClickHouse
A integração do Streamkap foi desenvolvida para gerenciar com eficiência os dados de CDC no ClickHouse.
Engine de Tabela e Tratamento de Dados
Por padrão, o Streamkap usa o modo de ingestão upsert. Quando cria uma tabela no ClickHouse, ele usa o engine ReplacingMergeTree. Esse engine é ideal para lidar com eventos de CDC:
-
A chave primária da tabela de origem é usada como chave ORDER BY na definição da tabela ReplacingMergeTree.
-
Atualizações na origem são gravadas como novas linhas no ClickHouse. Durante o processo de mesclagem em segundo plano, o ReplacingMergeTree consolida essas linhas, mantendo apenas a versão mais recente com base na chave de ordenação.
-
Exclusões são tratadas por uma flag de metadados que alimenta o parâmetro
is_deleteddo ReplacingMergeTree. As linhas excluídas na origem não são removidas imediatamente, mas são marcadas como excluídas.- Opcionalmente, os registros excluídos podem ser mantidos no ClickHouse para fins analíticos
Colunas de metadados
O Streamkap adiciona várias colunas de metadados a cada tabela para gerenciar o estado dos dados:
| Nome da coluna | Descrição |
|---|---|
_STREAMKAP_SOURCE_TS_MS |
Timestamp (em milissegundos) do evento no banco de dados de origem. |
_STREAMKAP_TS_MS |
Timestamp (em milissegundos) de quando o Streamkap processou o evento. |
__DELETED |
Um sinalizador booleano (true/false) que indica se a linha foi excluída na origem. |
_STREAMKAP_OFFSET |
Valor de offset dos logs internos do Streamkap, útil para ordenação e depuração. |
Consultando os dados mais recentes
Como o ReplacingMergeTree processa atualizações e exclusões em segundo plano, uma consulta SELECT * simples pode mostrar linhas históricas ou já excluídas antes que uma mesclagem seja concluída. Para obter o estado mais atual dos seus dados, você deve filtrar os registros excluídos e selecionar apenas a versão mais recente de cada linha.
Você pode fazer isso usando o modificador FINAL, o que é prático, mas pode afetar o desempenho da consulta:
-- Usando FINAL para obter o estado atual correto
SELECT * FROM your_table_name FINAL WHERE __DELETED = 'false';
SELECT * FROM your_table_name FINAL LIMIT 10;
SELECT * FROM your_table_name FINAL WHERE <filter by keys in ORDER BY clause>;
SELECT count(*) FROM your_table_name FINAL;Para obter melhor desempenho em tabelas grandes, especialmente se você não precisar ler todas as colunas e em consultas analíticas pontuais, é possível usar a função argMax para selecionar manualmente o registro mais recente de cada chave primária:
SELECT key,
argMax(col1, version) AS col1,
argMax(col2, version) AS col2
FROM t
WHERE <seus predicados>
GROUP BY key;Para casos de uso em produção e consultas recorrentes e simultâneas de usuários finais, visões materializadas podem ser usadas para modelar os dados de forma que se adaptem melhor aos padrões de acesso subsequentes.