Criando um Cliente Kafka

O cliente Kafka é um aplicativo que permite interagir com um cluster Kafka. Você cria aplicativos do produtor para enviar dados para tópicos do Kafka e aplicativos do consumidor para ler as mensagens dos tópicos do Kafka.

Instalando o Kafka

Em cada instância de computação que você cria, instale as bibliotecas e ferramentas do cliente Apache Kafka.

  1. Estabeleça conexão com a instância de computação que você criou.
    ssh -i <private-key-file> <username>@<public-ip-address>
  2. O Apache Kafka requer Java. Instale o Java na instância de computação, se ele ainda não estiver instalado. Você pode verificar se o Java está instalado executando o comando version.
    java -version
    sudo yum install java-11-openjdk -y
  3. Faça download da versão do Apache Kafka que você deseja instalar no servidor oficial do Apache Kafka.
    wget https://downloads.apache.org/kafka/<version>/kafka_<version>.tgz
  4. Extraia o pacote baixado.
    tar -xzf kafka_<version>.tgz

Configurando o Cliente

Em cada instância de computação criada, você configura o arquivo de propriedades do cliente.

  1. Estabeleça conexão com a instância de computação que você criou.
    ssh -i <private-key-file> <username>@<public-ip-address>
  2. Altere o diretório para o diretório config no local da biblioteca cliente Apache Kafka instalada.
    cd kafka_<version>/config
  3. Crie um arquivo chamado client.properties.
    nano client.properties
  4. Dependendo da autenticação configurada para o cluster do Kafka, crie as definições de propriedade de segurança no arquivo client.properties.
    • Para autenticação SASL/SCRAM
      security.protocol=SASL_SSL 
      sasl.mechanism=SCRAM-SHA-512 
      sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="<vault-username>" password="<vault-secret>"
    • Para autenticação mTLS
      security.protocol=SSL
      ssl.certificate.location=/leaf.cert
      ssl.key.location=/leaf.key
      ssl.keystore.password=<password>
      ssl.keystore.location=/kafka-keystore.p12

Usando a CLI do Kafka

Após instalar e configurar o aplicativo cliente, use as ferramentas da CLI do Apache Kafka incorporadas para gerenciar e interagir com o cluster do Kafka no Streaming com o Apache Kafka.

O Apache Kafka inclui alguns clientes incorporados. Por exemplo, os clientes Consumidor Java e Produtor Java.

Além disso, a comunidade Kafka fornece muito mais clientes que você pode usar.

A seguir estão algumas referências rápidas úteis:

Gerenciando a Configuração do Cliente

Os clientes Kafka exigem configurações específicas para especificar como o cliente deve enviar e receber mensagens, tratar erros e gerenciar sua conexão com o cluster Kafka.

O Apache Kafka fornece ferramentas de interface de linha de comando (CLI) no diretório /bin. Por exemplo, a ferramenta kafka-configs.sh disponível nas bibliotecas de cliente Kafka instaladas pode ser usada para gerenciar configurações de cliente.

Veja a seguir alguns exemplos de comandos comuns da CLI. Obtenha detalhes do cluster para o URL de bootstrap nos comandos. Especifique o caminho para o arquivo client.properties criado quando configurou o cliente.

Exibindo a configuração do tópico

Para exibir uma configuração de tópico, execute a ferramenta kafka-configs.sh especificando o nome do tópico para o qual você deseja exibir a configuração.

bin/kafka-configs.sh
--bootstrap-server $URL
--command-config /path/to/client.properties
--entity-type topics
--entity-name $TOPIC_NAME
--describe
Exibindo informações de partição e replicação de todos os tópicos

Para exibir informações de partição e replicação de todos os tópicos, execute a ferramenta kafka-configs.sh.

bin/kafka-configs.sh
--bootstrap-server $URL
--command-config /path/to/client.properties
--describe | grep Factor | sort 
Alterando a configuração do tópico

Para alterar uma configuração de tópico, como retenção e segmento, execute a ferramenta kafka-configs.sh especificando o nome do tópico para o qual você deseja alterar a configuração.

bin/kafka-configs.sh
--bootstrap-server $URL
--command-config /path/to/client.properties
--entity-type topics
--entity-name $TOPIC_NAME
--alter
--add-config retention.ms=1, segment.ms=60000
Removendo a configuração do tópico

Para remover uma configuração de tópico, como retenção e segmento, execute a ferramenta kafka-configs.sh especificando o nome do tópico para o qual você deseja remover a configuração.

bin/kafka-configs.sh
--bootstrap-server $URL
--command-config /path/to/client.properties
--entity-type topics
--entity-name $TOPIC_NAME
--alter
--delete-config retention.ms,segment.ms
Exibindo o uso do disco para cada partição

Para exibir o uso do disco para cada partição, execute a ferramenta kafka-log-dirs.sh e especifique o caminho para o arquivo de log de saída.

bin/kafka-log-dirs.sh
--bootstrap-server $URL
--command-config /path/to/client.properties
--describe | tail -1 > /tmp/logdirs.output.txt

Em seguida, execute o comando a seguir para filtrar o arquivo de log e exibir seu conteúdo. Ajuste brokers[0] para direcionar um broker específico.

cat /tmp/logdirs.output.txt
  | jq -r '.brokers[0] | .logDirs[0].partitions[] | .partition + " " + (.size|tostring)' 
  | sort 
  | awk 'BEGIN {sum=0} {sum+=$2} END {print sum}'
Ativando o log de rastreamento

Para ativar o log de rastreamento de um broker, crie um arquivo log4j.properties com as propriedades a seguir.

log4j.rootLogger=TRACE, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

Em seguida, execute o comando a seguir.

export KAFKA_OPTS="-Dlog4j.configuration=file:/path/to/log4j.properties"

Monitorando Métricas do Cliente

Você deve monitorar os aplicativos cliente e o cluster Kafka.

Use o serviço OCI Monitoring para monitorar as métricas emitidas pelos brokers do Kafka.

Para as métricas do cliente, você deve criar seu próprio painel de controle personalizado para monitorar os aplicativos do cliente. No mínimo, monitore as seguintes métricas de cliente:

  • record-send-rate
  • request-latency-avg
  • error-rate
  • records-consumed-rate
  • lag
  • fetch-latency-avg
  • Retries
  • disconnects