Adicionei Spring Kafka ao meu aplicativo Spring e esperava que funcionasse, mas consegui
INFO [ main] o.a.kafka.common.utils.AppInfoParser : Kafka version: 3.4.1
INFO --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka commitId: 8a516edc2755df89
INFO --- [ main] o.a.kafka.common.utils.AppInfoParser : Kafka startTimeMs: 1694915576434
INFO --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Node -1 disconnected.
WARN --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established.
Eu adicionei ao meupom.xml
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>3.0.9</version>
</dependency>
e configurei-o
@Bean
public KafkaAdmin kafkaAdmin() {
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
return new KafkaAdmin(configs);
}
@Bean
public NewTopic checkInTopic() {
return new NewTopic(checkInTopicName, 1, (short) 1);
}
onde bootstrapAddress
é configurado via application.yml
:
spring:
kafka:
bootstrap-servers: localhost:9092
e também tenho uma configuração de produtor:
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
@Bean
public ProducerFactory<String, String> producerFactory() {
return new DefaultKafkaProducerFactory<>(Map.of(
ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress,
ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class,
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class
));
}
O que está errado? Devo executar o Kafka manualmente na porta localhost 9092
? Presumo que isso seja feito automaticamente pelo framework Spring, assim como não preciso implantá-lo no Tomcat porque ele está empacotado. Isso inicia o serviço Kafka ou devo fazer isso sozinho?
Sim, você deve executar o Kafka manualmente na porta localhost
9092
.Os módulos Spring Kafka não são empacotados com binários Kafka. Ele contém apenas as APIs Kafka necessárias para realizar operações em tópicos, produtores e consumidores do Kafka.
Por outro lado, você precisará baixar e configurar o Apache Kafka em seu sistema.
Existem 2 opções para executar um serviço Kafka: com o Zookeeper legado e o KRaft mais recente.
O modo KRaft é mais escalonável que o modo ZooKeeper, permitindo que os clusters Kafka lidem com mais tráfego e dados. O modo KRaft é mais rápido que o modo ZooKeeper, resultando em menor latência e maior rendimento.
Os passos iniciais são os mesmos.
bin/
o diretório kafka.Kraft
Etapas continuadas:
./gradlew jar -PscalaVersion=2.13.10
KAFKA_CLUSTER_ID="$(./kafka-storage.sh random-uuid)"
./kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c ../config/kraft/server.properties
log.dirs
para apontar para algum outro diretório válido em vez de/tmp/kraft-combined-logs
../kafka-server-start.sh ../config/kraft/server.properties
Para Windows, há uma pasta
windows
com scripts em lote correspondentes aos scripts de shell do Linux/Mac.Funcionário do zoológico
Etapas continuadas:
Inicie o Zookeeper .
./zookeeper-server-start.sh ../config/zookeeper.properties
windows\zookeeper-server-start.bat ..\..\config\zookeeper.properties
Edite o server.properties
listeners=PLAINTEXT://localhost:9092
para permitir que o corretor seja escutado neste soquete.log.dirs
para apontar para algum outro diretório válido em vez de/tmp/kafka-logs
.Inicie o corretor Kafka.
./kafka-server-start.sh ../config/server.properties
windows\kafka-server-start.bat ..\..\config\server.properties
Isso é tudo para a configuração inicial.
Visite aqui para ler mais informações sobre criação de tópicos e outras coisas relacionadas ao Kafka.
Agora, o aplicativo Spring poderá se conectar ao Kafka.