@@ -24,7 +24,9 @@ class KafkaManager(PubSubManager): # pragma: no cover
24
24
server = socketio.Server(client_manager=socketio.KafkaManager(url))
25
25
26
26
:param url: The connection URL for the Kafka server. For a default Kafka
27
- store running on the same host, use ``kafka://``.
27
+ store running on the same host, use ``kafka://``. For a highly
28
+ available deployment of Kafka, pass a list with all the
29
+ connection URLs available in your cluster.
28
30
:param channel: The channel name (topic) on which the server sends and
29
31
receives notifications. Must be the same in all the
30
32
servers.
@@ -44,10 +46,12 @@ def __init__(self, url='kafka://localhost:9092', channel='socketio',
44
46
super (KafkaManager , self ).__init__ (channel = channel ,
45
47
write_only = write_only )
46
48
47
- self .kafka_url = url [8 :] if url != 'kafka://' else 'localhost:9092'
48
- self .producer = kafka .KafkaProducer (bootstrap_servers = self .kafka_url )
49
+ urls = [url ] if isinstance (url , str ) else url
50
+ self .kafka_urls = [url [8 :] if url != 'kafka://' else 'localhost:9092'
51
+ for url in urls ]
52
+ self .producer = kafka .KafkaProducer (bootstrap_servers = self .kafka_urls )
49
53
self .consumer = kafka .KafkaConsumer (self .channel ,
50
- bootstrap_servers = self .kafka_url )
54
+ bootstrap_servers = self .kafka_urls )
51
55
52
56
def _publish (self , data ):
53
57
self .producer .send (self .channel , value = pickle .dumps (data ))
0 commit comments