Skip to content

Commit a4c9fa1

Browse files
committed
kafka C-level concurrency bug fix
1 parent 535d37c commit a4c9fa1

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

backend/app/events/core/producer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import asyncio
22
import json
33
import socket
4+
import threading
45
from datetime import datetime, timezone
56
from typing import Any, Callable, TypeAlias
67

78
from confluent_kafka import Message, Producer
89
from confluent_kafka.error import KafkaError
910

11+
# Global lock to serialize Producer initialization (workaround for librdkafka race condition)
12+
# See: https://github.com/confluentinc/confluent-kafka-python/issues/1797
13+
_producer_init_lock = threading.Lock()
14+
1015
from app.core.lifecycle import LifecycleEnabled
1116
from app.core.logging import logger
1217
from app.core.metrics.context import get_event_metrics
@@ -113,7 +118,9 @@ async def start(self) -> None:
113118
producer_config["stats_cb"] = self._handle_stats
114119
producer_config["statistics.interval.ms"] = 30000
115120

116-
self._producer = Producer(producer_config)
121+
# Serialize Producer initialization to prevent librdkafka race condition
122+
with _producer_init_lock:
123+
self._producer = Producer(producer_config)
117124
self._running = True
118125
self._poll_task = asyncio.create_task(self._poll_loop())
119126
self._state = ProducerState.RUNNING

0 commit comments

Comments
 (0)