Kafka メトリックを監視したいのですが、残念ながら /actuator/prometheus エンドポイントの下に Kafka に関連するものは何もありません。セットアップに欠けているものはありますか?
アプリケーションの依存関係: Kotlin 1.4.31、Spring Boot 2.3.9、Spring Kafka 2.6.7、Reactor Kafka 1.2.5、Kafka Clients 2.5.1
アプリケーション構成:
management:
server:
port: 8081
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
spring:
jmx:
enabled: true
kafka:
bootstrap-servers: ...
consumer:
group-id: my-service
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
listener:
ack-mode: manual
ssl:
key-store-location: ...
key-store-password: ...
security:
protocol: SSL
私の受信機は次のようになります:
@Bean
fun someEventReceiver(): SomeEventReceiver =
KafkaReceiver.create(
ReceiverOptions.create<String, SomeEvent>(kafkaProperties.buildConsumerProperties())
.withValueDeserializer(SomeEvenDeserializer())
.subscription(listOf(serviceProperties.kafka.topics.someevent))
)
そしてリスナー:
@EventListener(ApplicationStartedEvent::class)
fun onSomeEvent() {
someEventReceiver
.receive()
.groupBy { it.receiverOffset().topicPartition() }
.publishOn(Schedulers.boundedElastic())
.flatMap { someEvent ->
someEvent
.publishOn(Schedulers.boundedElastic())
.delayUntil(::handleEvent)
.doOnNext { it.receiverOffset().acknowledge() }
.retryWhen(Retry.backoff(10, Duration.ofMillis(100)))
}
.retryWhen(Retry.indefinitely())
.subscribe()
}