【发布时间】:2016-03-07 22:11:34
【问题描述】:
Scrapy Clusters 是一种扩展大型、连续的 scrapy 项目的绝佳新方法。它在 VM 中设置,并与来自不同工具的多个实例一起运行。
我已经构建了虚拟机并安装了必要的工具,例如 Redis、Kafka 和 zookeeper。
在我第一次测试爬行之前,我只是停留在一条简单的线上,我不知道这是 python 问题、安装问题还是什么。
当我尝试时
python kafka_monitor.py run
我明白了:
Traceback(最近一次调用最后一次):文件“kafka_monitor.py”,行 512,在 sys.exit(main())
文件“kafka_monitor.py”,第 497 行,在 main kafka_monitor.run()
运行中的文件“kafka_monitor.py”,第 413 行 self._setup_kafka()
_setup_kafka 中的文件“kafka_monitor.py”,第 232 行 ret_val = _hidden_setup()
文件“/usr/local/lib/python2.7/dist-packages/scutils/method_timer.py”,行 46,在 f2 retval = f(*args)
_hidden_setup 中的文件“kafka_monitor.py”,第 218 行 self.kafka_conn = KafkaClient(self.settings['KAFKA_HOSTS'])TypeError: ____init___() 只需要 1 个参数(给定 2 个)
settings.py 包括:
KAFKA_HOSTS = 'localhost:9092'
KAFKA_INCOMING_TOPIC = 'demo.incoming'
KAFKA_GROUP = 'demo-group'
KAFKA_FEED_TIMEOUT = 5
KAFKA_CONN_TIMEOUT = 5
按照Quick Start 的指示,我也做了一个localsettings.py
# Here, 'scdev' is the host with Kafka, Redis, and Zookeeper
REDIS_HOST = 'scdev'
KAFKA_HOSTS = 'scdev:9092'
ZOOKEEPER_HOSTS = 'scdev:2181'
即使我进入 kafka_monitor.py 并更改第 218 行(从上面的初始错误回溯)
发件人:
self.kafka_conn = KafkaClient(self.settings['KAFKA_HOSTS'])
收件人:
self.kafka_conn = KafkaClient(self.settings['scdev:9092'])
我收到同样的错误。
【问题讨论】:
-
看来您必须从
KafkaClient()调用中删除参数。该消息具有误导性,因为self始终作为第一个参数传递。所以给出一个论点会导致两个论点。 -
谢谢我做了一个实验:
self.kafka_conn = KafkaClient()我得到AttributeError: 'KafkaClient' object has no attribute 'ensure_topic_exists' -
kafka_monitor 和 KafkaClient() 之间似乎存在一些版本不兼容问题。我会使用 ensure_topic_exists 查找 KafkaClient 的版本,并确保我安装了该版本。
-
kafka-python 在 1.0 版本中有很多变化,你可能想在 scrapy-cluster requirements.txt (0.9.5) 中使用相同的版本
标签: python scrapy cluster-computing apache-kafka typeerror