11"""Producer interception functionality."""
22
33import os
4+ import uuid
45from typing import Any , Dict
56
67from ..util .logger import get_logger
78from ..util .config import get_topics_list , is_disabled
9+ from ..util .metrics import configure_confluent_stats_callback
810from .metadata import fetch_metadata_sync , optimal_cfg , _DEFAULTS
911from ..core .reporter import send_clients_msg
1012from ..core .manager import normalize_bootstrap
@@ -345,10 +347,18 @@ def __init__(self, conf: Dict[str, Any], *args, **kwargs):
345347 logger .debug ("Overriding configuration: {} ((not set) -> {})" , k , v )
346348 conf [k ] = v
347349
350+
351+ # Generate UUID for this producer
352+ tracker_uuid = str (uuid .uuid4 ())
353+
354+ # Configure stats callback for metrics collection
355+ conf = configure_confluent_stats_callback (conf , tracker_uuid )
356+
348357 # Create the producer with optimized configuration
349358 self ._producer = Producer (conf , * args , ** kwargs )
350359
351360 report_interval = metadata .get ("report_interval_ms" ) if metadata else _DEFAULT_REPORT_INTERVAL_MS
361+ # Create tracker with the generated UUID
352362 self ._tracker = ProducerTracker (
353363 lib = "confluent" ,
354364 producer = self ._producer ,
@@ -357,10 +367,12 @@ def __init__(self, conf: Dict[str, Any], *args, **kwargs):
357367 orig_cfg = orig_cfg ,
358368 opt_cfg = opt_cfg ,
359369 report_interval_ms = int (report_interval or _DEFAULT_REPORT_INTERVAL_MS ),
360- error = error_msg , # Store error message in tracker
370+ error = error_msg ,
361371 metadata = metadata ,
362372 topics_env = topics_env ,
373+ uuid = tracker_uuid , # Use the generated UUID
363374 )
375+
364376 Heartbeat .register_tracker (self ._tracker )
365377
366378 send_clients_msg (self ._tracker , error_msg )
@@ -397,12 +409,15 @@ def __del__(self):
397409 self ._superstream_closed = True
398410 self ._tracker .close ()
399411 Heartbeat .unregister_tracker (self ._tracker .uuid )
412+
413+ # Remove metrics extractor from registry
414+ from ..util .metrics import remove_producer_metrics_extractor
415+ remove_producer_metrics_extractor (self ._tracker .uuid )
416+
400417 logger .debug ("Superstream tracking stopped for confluent-kafka producer with client_id: {}" ,
401418 getattr (self ._tracker , 'client_id' , 'unknown' ))
402419 except Exception as e :
403420 logger .error ("Error during automatic cleanup: {}" , e )
404- else :
405- logger .debug ("Producer already cleaned up or no tracker found" )
406421
407422 def __getattr__ (self , name ):
408423 """Delegate all other attributes to the underlying producer."""
0 commit comments