perf: batch group unread fanout

This commit is contained in:
richjohnrambo
2026-09-27 23:10:28 +08:00
parent fc875cc84e
commit 6b8ed4a2cc
10 changed files with 260 additions and 4 deletions
+27 -1
View File
@@ -102,6 +102,19 @@ var (
Name: "im_cluster_proxy_response_total",
Help: "Cluster proxy responses by pod and result.",
}, []string{"pod", "result"})
InternalQueueEnqueueTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "im_internal_queue_enqueue_total",
Help: "Internal message queue enqueue attempts by pod, queue, and result.",
}, []string{"pod", "queue", "result"})
InternalQueueDepth = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "im_internal_queue_depth",
Help: "Internal message queue depth observed after enqueue attempts by pod and queue.",
Buckets: []float64{0, 1, 4, 16, 32, 64, 128, 192, 256, 512, 1024, 2048, 4096, 8192},
}, []string{"pod", "queue"})
InternalQueueCapacity = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "im_internal_queue_capacity",
Help: "Configured internal message queue capacity by pod and queue.",
}, []string{"pod", "queue"})
MessagePersistDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "im_message_persist_duration_seconds",
Help: "Kafka message persistence duration by message kind and result.",
@@ -135,7 +148,8 @@ func init() {
HTTPRequestsTotal, HTTPRequestDuration, DBQueryDuration,
RealtimeFanoutEventsTotal, RealtimeFanoutDeliveryDuration, ClusterP2MQueueLength,
ClusterP2MQueueCapacity, ClusterP2MEnqueueTotal, ClusterRPCInflight, ClusterRPCDuration,
ClusterRouteTotal, ClusterProxyResponseTotal, MessagePersistDuration, MessagePublishStageDuration,
ClusterRouteTotal, ClusterProxyResponseTotal, InternalQueueEnqueueTotal, InternalQueueDepth,
InternalQueueCapacity, MessagePersistDuration, MessagePublishStageDuration,
KafkaMessagePersistTotal)
Registry.MustRegister(KafkaConsumerLag, KafkaBacklogOldestAge, KafkaDeadLettersTotal)
}
@@ -177,6 +191,18 @@ func ObserveRealtimeFanoutDelivery(kind, targetType string, timestamp time.Time)
Observe(time.Since(timestamp).Seconds())
}
func ObserveInternalQueueEnqueue(queue string, depth, capacity int, accepted bool) {
result := "ok"
if !accepted {
result = "full"
}
pod := metricPodName()
queue = normalizeLabel(queue)
InternalQueueEnqueueTotal.WithLabelValues(pod, queue, result).Inc()
InternalQueueDepth.WithLabelValues(pod, queue).Observe(float64(depth))
InternalQueueCapacity.WithLabelValues(pod, queue).Set(float64(capacity))
}
func normalizeLabel(value string) string {
if value == "" {
return "unknown"