我是Twisted的新手,这是我的第一个程序。
我找不到使用kafka-python库中的KafkaConsumer的方法,并使用treq来触发对elasticsearch的发布请求。
我可以用小块分解问题: 创建一个kafka使用者迭代器并从中读取数据(主题可能很大)
def consumeKafka():
consumer = KafkaConsumer(bootstrap_servers="kafka:9092", auto_offset_reset='earliest')
consumer.subscribe(['kafkapipeline'])
for v in consumer:
v.value
使用treq发布到elasticsearch
def post(self):
d = treq.post('http://es:9200/pro/pr/', self.data)
d.addCallbacks(lambda x: print(x), lambda x: print("error %s " % x))
启动反应堆
from twisted.internet import reactor
reactor.callWhenRunning(consumeKafka)
reactor.run()
知道如何使这项工作吗?
答案 0 :(得分:0)
我根本不使用Kafka,所以我不确定这是否适合你。另外,我假设您在同时运行Kafka和treq时遇到了麻烦。我在Twisted中处理迭代器的一般方法是使用inlineCallbacks
等待结果,然后对该结果执行某些操作。
from twisted.internet import defer
@defer.inlineCallbacks
def consumeKafka():
consumer = KafkaConsumer(bootstrap_servers="kafka:9092", auto_offset_reset='earliest')
consumer.subscribe(['kafkapipeline'])
for v in consumer:
value = yield v.value
# do stuff with value
然后你可以简单地调用这个函数,反应器将负责其余的工作。所以你的主要部分将如下所示:
consumeKafka()
reactor.run()
请注意,consumeKafka()
函数返回Deferred
,因此您可以根据需要添加回调和错误。熟悉此模型后,请查看Cooperator
个对象以获取更多功能。