top of page
Foto do escritorRafael Natali

Aprimorando o desempenho de um conector de origem CSV do Kafka Connect

Quando você cria um conector de origem no Kafka Connect, por padrão, ele usará o batch.size padrão do broker, que é de 16.384 bytes (16 KB). Isso pode ter um impacto significativo no tempo de ingestão de arquivos maiores. Vamos usar um arquivo com mais de 20.000.000 de linhas como exemplo e coletar algumas métricas:






Cada registro tem cerca de 493 bytes e, com o batch.size de 16 KB, este conector pode enviar, em média, 30 registros por solicitação. Ao observar a métrica Records Send Total, podemos ver que levou 7 horas para enviar todos os registros para o tópico.


A partir do Apache Kafka 2.3 (disponível como parte da Confluent Platform 5.3) você agora pode substituir as propriedades do produtor por conector. Observe que isso está ativado por padrão no Confluent 7.0+.


Para fazer isso, primeiro você precisa permitir isso na configuração do worker:

connector.client.config.override.policy=All

Se você estiver usando o Docker, a configuração é definida por meio da variável de ambiente CONNECT_CONNECTOR_CLIENT_CONFIG_OVERRIDE_POLICY, por exemplo, no Docker Compose, ficaria assim:

CONNECT_CONNECTOR_CLIENT_CONFIG_OVERRIDE_POLICY: 'All'

De acordo com este artigo Kafka Connect: How to Increase Throughput on Source Connectors | UK, o cálculo para o batch.size é:

batch.size = number_of_records * record_size_average_in_bytes

Considerando que queremos enviar 1500 registros para cada batch:

batch.size = 1500 * 493 bytes
batch.size = 739500 bytes

Lembre-se de que o batch.size nāo pode ser maior do que a configuraçāo max.message.bytes configured do tópico. Caso contrário, teremos um erro “MESSAGE_TOO_LARGE”.


Depois de calcular isso, você pode alterar as propriedades do produtor que deseja em cada configuração de conector individualmente. Por exemplo:

"producer.override.batch.size": 739500,

Ao inserir outro arquivo e examinar as mesmas métricas, podemos observar as melhorias:



Conclusāo


Neste exemplo, reduzimos o tempo de ingestão de mais de 30.000.000 de registros em um tópico Kafka de 7 horas para 30 minutos. Existem outras métricas e configurações que você pode experimentar para melhorar o desempenho do seu conector de origem.


Recomendo estudar o artigo Kafka Connect: How to Increase Throughput on Source Connectors | UK para obter mais detalhes e informações sobre como otimizar ainda mais o desempenho do conector de origem.

9 visualizações0 comentário

Comments


bottom of page