O HTTP Connector é distribuído sob a Confluent Enterprise License.
Etapas de início rápido
1
Reúna seus detalhes de conexão
Para se conectar ao ClickHouse via HTTP(S), você precisa das seguintes informações:
Escolha HTTPS. Os detalhes de conexão são exibidos em um comando 
Se você estiver usando ClickHouse autogerenciado, os detalhes de conexão são definidos pelo administrador do seu ClickHouse.
Os detalhes do seu serviço do ClickHouse Cloud estão disponíveis no console do ClickHouse Cloud.
Selecione um serviço e clique em Connect:

curl de exemplo.
2
Execute o Kafka Connect e o conector HTTP Sink
Você tem duas opções:
-
Autogerenciado: Baixe o pacote da Confluent e instale-o localmente. Siga as instruções de instalação do conector conforme documentado aqui.
Se você usar o método de instalação
confluent-hub, seus arquivos de configuração locais serão atualizados. - Confluent Cloud: Uma versão totalmente gerenciada do HTTP Sink está disponível para quem usa o Confluent Cloud para hospedar o Kafka. Isso exige que seu ambiente ClickHouse esteja acessível a partir do Confluent Cloud.
Os exemplos a seguir usam o Confluent Cloud.
3
Crie a tabela de destino no ClickHouse
Antes do teste de conectividade, vamos começar criando uma tabela de teste no ClickHouse Cloud; essa tabela receberá os dados do Kafka:
4
Configure o HTTP Sink
Crie um tópico do Kafka e uma instância do conector HTTP Sink:
Configure o conector HTTP Sink:
Configure o conector HTTP Sink:
- Informe o nome do tópico que você criou
- Autenticação
HTTP Url- URL do ClickHouse Cloud com uma consultaINSERTespecificada:<protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow. Observação: a consulta deve ser codificada.Endpoint Authentication type- BASICAuth username- nome de usuário do ClickHouseAuth password- senha do ClickHouse
Esta
HTTP Url é propensa a erros. Certifique-se de escapar tudo corretamente para evitar problemas.- Configuração
Input Kafka record value format- Depende dos seus dados de origem, mas, na maioria dos casos, será JSON ou Avro. AssumimosJSONnas configurações a seguir.- Na seção
advanced configurations:HTTP Request Method- Defina como POSTRequest Body Format- jsonBatch batch size- De acordo com as recomendações do ClickHouse, defina esse valor como no mínimo 1000.Batch json as array- trueRetry on HTTP codes- 400-500, mas ajuste conforme necessário; por exemplo, isso pode mudar se você tiver um proxy HTTP na frente do ClickHouse.Maximum Reties- o padrão (10) é adequado, mas fique à vontade para ajustar se quiser tentativas de repetição mais robustas.
5
Testando a conectividade
Crie uma mensagem em um tópico configurado pelo seu HTTP Sink
e verifique se a mensagem criada foi gravada na sua instância do ClickHouse.
e verifique se a mensagem criada foi gravada na sua instância do ClickHouse.
Solução de problemas
O HTTP Sink não agrupa mensagens em lote
O conector HTTP Sink não agrupa em lote solicitações de mensagens que contêm valores de header do Kafka diferentes.
- Verifique se os registros do Kafka têm a mesma chave.
- Ao adicionar parâmetros à URL da API HTTP, cada registro pode resultar em uma URL exclusiva. Por esse motivo, o agrupamento em lote é desativado ao usar parâmetros de URL adicionais.
400 requisição inválida
CANNOT_PARSE_QUOTED_STRING
String:
input_format_json_read_objects_as_strings=1 na URL como uma string codificada SETTINGS%20input_format_json_read_objects_as_strings%3D1
Carregue o conjunto de dados do GitHub (opcional)
Array do conjunto de dados do GitHub. Pressupomos que, nos exemplos, você tenha um tópico github vazio e use o kcat para inserir mensagens no Kafka.
1
Preparar a configuração
Siga estas instruções para configurar o Connect de acordo com o seu tipo de instalação, observando as diferenças entre um cluster standalone e um distribuído. Se estiver usando o Confluent Cloud, a configuração distribuída é a aplicável.O parâmetro mais importante é o Os seguintes parâmetros adicionais são relevantes para usar o HTTP Sink com o ClickHouse. Uma lista completa de parâmetros pode ser encontrada aqui:
http.api.url. A interface HTTP do ClickHouse exige que você codifique a instrução INSERT como um parâmetro na URL. Isso deve incluir o formato (JSONEachRow, neste caso) e o banco de dados de destino. O formato deve ser compatível com os dados do Kafka, que serão convertidos em uma string no payload HTTP. Esses parâmetros devem ser escapados na URL. Um exemplo desse formato para o conjunto de dados do GitHub (supondo que você esteja executando o ClickHouse localmente) é mostrado abaixo:request.method- Defina como POSTretry.on.status.codes- Defina como 400-500 para repetir a tentativa em qualquer código de erro. Ajuste conforme os erros esperados nos dados.request.body.format- Na maioria dos casos, será JSON.auth.type- Defina como BASIC se você usar segurança com o ClickHouse. Outros mecanismos de autenticação compatíveis com o ClickHouse não são compatíveis no momento.ssl.enabled- defina como true se estiver usando SSL.connection.user- nome de usuário do ClickHouse.connection.password- senha do ClickHouse.batch.max.size- O número de linhas a serem enviadas em um único lote. Certifique-se de definir um número adequadamente alto. De acordo com as recomendações do ClickHouse, um valor de 1000 deve ser considerado o mínimo.tasks.max- O conector HTTP Sink oferece suporte à execução de uma ou mais tarefas. Isso pode ser usado para aumentar o desempenho. Junto com o tamanho do lote, esse é o principal meio de melhorar o desempenho.key.converter- defina de acordo com os tipos das suas chaves.value.converter- defina com base no tipo de dados no seu tópico. Esses dados não precisam de um esquema. O formato aqui deve ser consistente com o FORMAT especificado no parâmetrohttp.api.url. A opção mais simples é usar JSON e o conversor org.apache.kafka.connect.json.JsonConverter. Também é possível tratar o valor como uma string, por meio do conversor org.apache.kafka.connect.storage.StringConverter, embora isso exija que o usuário extraia um valor na instrução insert usando funções. O formato Avro também é compatível com o ClickHouse ao usar o conversor io.confluent.connect.avro.AvroConverter.
2
Criar a tabela no ClickHouse
Certifique-se de que a tabela foi criada. Um exemplo de um conjunto de dados mínimo do GitHub usando um MergeTree padrão é mostrado abaixo.
3
Adicionar dados ao Kafka
Insira mensagens no Kafka. A seguir, usamos kcat para inserir 10 mil mensagens.Uma simples consulta à tabela de destino “Github” deve confirmar a inserção dos dados.