我正在使用spring-integration进行从UDP端点到kafka的数据流。我已经使用使用者和生产者配置在@Configuration中将ReplyingKafkaTemplate初始化为@Bean。服务器启动后,发送一些udp请求后,我可以看到使用者的指标。但是,即使在“生产者配置”中设置了jmx报告器后,我也看不到生产者的指标。
我尝试不设置生产者指标报告程序,假设它会像消费者指标一样自动显示(那里没有额外的配置)
生产者配置
Map<String, Object> configProps = new HashMap<>();
configProps.put(
ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
bootstrapAddress);
configProps.put(
ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
StringSerializer.class);
configProps.put(
ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
KafkaAvroSerializer.class);
configProps.put("schema.registry.url", "http://schema-regisry-server:8081");
configProps.put(
ProducerConfig.RETRIES_CONFIG,
3);
configProps.put(ProducerConfig.RECONNECT_BACKOFF_MS_CONFIG, 500);
configProps.put(ProducerConfig.RECONNECT_BACKOFF_MAX_MS_CONFIG, 5000);
configProps.put(ProducerConfig.METRIC_REPORTER_CLASSES_CONFIG, "org.apache.kafka.common.metrics.JmxReporter");
configProps.put(ProducerConfig.METRICS_RECORDING_LEVEL_CONFIG, "INFO");
printConfigProps(configProps);
return new DefaultKafkaProducerFactory<>(configProps);
消费者配置
Map<String, Object> properties = new HashMap<>();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class);
properties.put("schema.registry.url", "http://schema-regisry-server:8081");
properties.put(ConsumerConfig.GROUP_ID_CONFIG, "spring-integration");
// automatically reset the offset to the earliest offset
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
return properties;
kafka模板创建
@Bean
public ReplyingKafkaTemplate<String, DataModel, DataModel> replyKafkaTemplate(ProducerFactory<String, DataModel> pf, KafkaMessageListenerContainer<String, DataModel> container) {
ReplyingKafkaTemplate<String, DataModel, DataModel> template = new ReplyingKafkaTemplate<>(pf, container);
template.start();
return template;
}
创建侦听器容器:
@Bean
public KafkaMessageListenerContainer<String, DataModel> replyContainer(ConsumerFactory<String, DataModel> cf) {
ContainerProperties containerProperties = new ContainerProperties(destinationTopic);
containerProperties.setGroupId("test");
return new KafkaMessageListenerContainer<>(cf, containerProperties);
}
ConsumerFactory创建
@Bean
public ConsumerFactory<?, ?> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
答案 0 :(得分:2)
2.3.0之前的Spring Boot 2版本仅在默认情况下公开使用者指标。 Spring Boot 2.3.0(几周前发布)依赖于Micrometer 1.4,它默认情况下同时公开消费者和生产者指标。 如果您不能使用最新版本的Spring Boot,则必须自己实施。