我正在使用Kafka和Spark Streaming构建应用程序。输入数据来自第三部分流媒体,并在kafka主题上发布。此代码显示了Stream Proxy模块:这是我从流式传输中获取结果以及如何将它们发送到KafkaPublisher的方式(它只显示了草图):
def on_result_response(self,*args):
self.kafkaPublisher.pushMessage(str(args[0]))
KafkaPublisher通过以下两种方法实现:
class KafkaPublisher:
def __init__(self,address,port,topic):
self.kafka = KafkaClient(str(address)+":"+str(port))
self.producer = SimpleProducer(self.kafka)
self.topic=topic
def pushMessage(self,message):
self.producer.send_messages(self.topic, message)
self.producer = SimpleProducer(self.kafka, async=True)
该应用程序由此主程序启动:
from StreamProxy import StreamProxy
streamProxy=StreamProxy("localhost",9092,"task1")
streamProxy.getStreaming(20) #seconds of streaming
经过一些批处理(或多或少10秒),它启动了以下例外:
线程Thread-2354中的异常: Traceback(最近一次调用最后一次): 在__bootstrap_inner中输入文件“/usr/lib/python2.7/threading.py”,第801行 文件“/usr/lib/python2.7/threading.py”,第754行,在运行中 在_send_upstream中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/producer/base.py”,第164行 在send_produce_request中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第649行 在_send_broker_aware_request中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第253行 在_get_conn中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第74行 在连接文件“/usr/local/lib/python2.7/dist-packages/kafka/conn.py”,第236行 错误:[Errno 24]打开文件太多
线程Thread-2355中的异常: Traceback(最近一次调用最后一次): 在__bootstrap_inner中输入文件“/usr/lib/python2.7/threading.py”,第801行 文件“/usr/lib/python2.7/threading.py”,第754行,在运行中 在_send_upstream中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/producer/base.py”,第164行 在send_produce_request中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第649行 在_send_broker_aware_request中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第253行 在_get_conn中输入文件“/usr/local/lib/python2.7/dist-packages/kafka/client.py”,第74行 在连接文件“/usr/local/lib/python2.7/dist-packages/kafka/conn.py”,第236行 错误:[Errno 24]打开文件太多
请注意,同一邮件有许多不同的例外情况,问题肯定是发布商方面。
答案 0 :(得分:1)
尝试删除行:
self.producer = SimpleProducer(self.kafka, async=True)