【发布时间】:2019-08-12 03:21:01
【问题描述】:
1) 我在我的机器上启动 kafka
2) 我使用配置启动我的 Spring Boot 服务器:
@Bean
public NewTopic MyTopic() {
return new NewTopic("my-topic", 5, (short) 1);
}
@Bean
public ProducerFactory<String, byte[]> greetingProducerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteArraySerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, byte[]> unpMessageKafkaTemplate() {
return new KafkaTemplate<>(greetingProducerFactory());
}
结果 - 服务器启动成功并在 kafka 中创建my-topic。
但是,如果我尝试在远程服务器上使用远程 kafka 执行此操作 - 主题不会创建。
并在日志中写入:
12:35:09.880 [ main] [INFO ] o.a.k.clients.admin.AdminClientConfig: [] AdminClientConfig values:
bootstrap.servers = [localhost:9092]
如果我将此 bean 添加到配置中:
@Bean
public KafkaAdmin admin() {
Map<String, Object> configs = new HashMap<>();
configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "remote_host:9092");
return new KafkaAdmin(configs);
}
主题创建成功。
1) 为什么会这样?
2) 我必须创建 KafkaAdmin 吗?为什么本地 Kafka 不需要?
编辑
我当前的配置:
spring:
kafka:
bootstrap-servers: remote:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringDeserializer
value-serializer: org.apache.kafka.common.serialization.ByteArraySerializer
和
@Configuration
public class KafkaTopicConfig {
@Value("${response.topics.topicName}")
private String topicName;
@Bean
public NewTopic responseTopic() {
return new NewTopic(topicName, 5, (short) 1);
}
}
开始后我看到:
bootstrap.servers = [remote:9092]
client.id =
connections.max.idle.ms = 300000
metadata.max.age.ms = 300000
metric.reporters = []
metrics.num.samples = 2
metrics.recording.level = INFO
metrics.sample.window.ms = 30000
receive.buffer.bytes = 65536
...
但没有创建主题
【问题讨论】:
标签: spring spring-boot apache-kafka spring-kafka