Kafka Producer停止我的代码

时间:2017-05-30 00:00:18

标签: apache-kafka kafka-producer-api kafka-python

我正在调用一个从kafka生产者发送一些数据的函数,但是在它发送之后我返回了一个不返回的响应。代码在返回时卡住了。任何人都知道发生了什么事吗?

我的代码如下,

def postEvent(eventData):
    print("The eventData is...",eventData)
    timestamp = datetime.now().__format__("%Y-%m-%d %H:%M:%S")
    try:
        producer = KafkaProducer(bootstrap_servers=["host:port"])
        data = json.dumps(eventData).encode('utf-8')
        try:

            kafkaResponse = producer.send('streamTest', data)

            response ={'time': str(timestamp), 'kafkaResponse':kafkaResponse.get(), 
                       'postResult': 'true'}
            print('kafaka response is...', response)
        except ConnectionAbortedError:
                response ={'time': str(timestamp), 'postResult': 'false'}
        except kafka.errors.KafkaTimeoutError:
                response ={'time': str(timestamp), 'postResult': 'false'}
        print('kafaka response is...', response)
        return response
    except kafka.errors.NoBrokersAvailable:
        response = {'Response':'Kafka Errors... NoBrokersAvailable'}
        print('kafaka response ', response)
        return response

1 个答案:

答案 0 :(得分:0)

从您的问题中不清楚它所悬挂的return声明。

我测试了你的代码,它对我来说非常适合使用Kafka 0.10.0.1经纪人和kafka-python 1.3.5。

这可能是Kafka群集网络问题,因此您可能会挂起的两个地方是: 1. kafkaResponse.get()等待Future解决 2.没有经纪人可用,而经纪人超时。如果您传入多个代理,请记住,在抛出NoBrokersAvailable错误之前,它们需要每次超时。