簡體   English   中英

Kafka是否支持雙向?

[英]Does Kafka to support bidirectional?

我有兩台需要進行雙向通信的服務器。

對於 kafka,我有 2 個主題、2 個生產者和 2 個消費者。 嘗試將服務器 1 與 2 與 1 個主題、1 個消費者和 1 個生產者進行通信,反之亦然,用於第 2 個服務器。

生產者.py

from kafka import KafkaProducer, KafkaConsumer
import gevent
import time
producer = KafkaProducer(bootstrap_servers='localhost:9092')
consumer = KafkaConsumer('game_events', bootstrap_servers='localhost:9092')

def prod():
    while True:
        time.sleep(2)
        producer.send('sockets', b'Hello  world') 
        producer.flush()
    

def cons():
    while True:
        game_server = consumer.__next__()
        print(game_server)


gevent.spawn(prod())
gevent.spawn(cons())

消費者.py

from kafka import KafkaConsumer, KafkaProducer
import gevent
import time
consumer = KafkaConsumer('sockets', bootstrap_servers=['localhost:9092'])
producer = KafkaProducer(bootstrap_servers='localhost:9092')

def cons():
    while(True):
        game_server = consumer.__next__()
        print(game_server)


def prod():
    while True:
        time.sleep(2)
        print("game_server")
        producer.send('game_events', b'Hello  Game Event') 
        producer.flush()

#for message in consumer:
#    print(message)



gevent.spawn(cons())
gevent.spawn(prod())

在這里,消費者只是收到sockets主題消息,而不是主題game_events 有什么辦法可以做到這一點? 還是卡夫卡不支持?

生產者.py
消費者.py

嗯,這很令人困惑。 這兩個模塊都有生產者和消費者......


你調用cons() ,它會啟動一個無限循環。 如果循環結束,該結果將傳遞給gevent.spawn()然后prod() function 才會運行。

如果您打算啟動 Greenlet 線程,則需要傳遞 function 句柄本身,該句柄在內部為這些函數啟動線程。

gevent.spawn(cons)
gevent.spawn(prod)

此外,而不是消費者的 while 循環,你應該能夠for msg in consumer ,然后你需要獲取msg.value()


你真的不需要gevent

您的生產者可能是一個Timer而消費者只是一個Thread https://docs.python.org/3/tutorial/stdlib2.html#multi-threading

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM