O HTTP Connector é distribuído sob a Confluent Enterprise License.
Passos de início rápido
1. Reúna os detalhes da conexão
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:
Escolha HTTPS. Os detalhes de conexão são exibidos em um comando
curl de exemplo.
Se você estiver usando ClickHouse autogerenciado, os detalhes de conexão são definidos pelo administrador do seu ClickHouse.
2. Execute o Kafka Connect e o conector HTTP sink
-
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 da Confluent Cloud.
Os exemplos a seguir usam o Confluent Cloud.
3. Criar tabela de destino no ClickHouse
4. Configure o 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
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
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.